【问题标题】:Most efficient way to find if row "a" has relation with row "b" in an ORM?查找“a”行是否与 ORM 中的“b”行有关系的最有效方法?
【发布时间】:2012-04-17 16:51:33
【问题描述】:

这是我的问题:

  • SomeTable 和 SomeOtherTable 之间存在 1-N 关系。
  • 用户想修改b行,但只有a行和b行有关系才能修改
  • 因此,我需要查找 SomeTable 中的 a 行与 SomeOtherTable 中的 b 行是否有关系

如果可以,请提供一般性答案,然后提供 symfony 1.4 和学说的具体答案。这对更多的人和我在多个框架中工作的人来说很有用。

我需要这个来处理某些表的 CRUD 权限。

我发现这是一个非常反复出现的问题

也许有解决这个问题的模式或插件?

  • 如何充分利用 symfony 缓存系统?

目前我只是想出了这个:

$someRow = Doctrine_Query::create()->from('SomeTable')->
  where('id = ?', $id_someTable)->
  andWhere('id_relation = ?',$id_someOtherTable)->execute();
return $someRow->count() > 0;

由于某种原因,我觉得这很难看...

【问题讨论】:

  • 我觉得我没有正确解释我的问题...对你有意义吗?

标签: php mysql orm doctrine symfony-1.4


【解决方案1】:

无论如何,你的标题比你的文字更明确。

你有一个函数called getRelations in Table.php。因此,您可以检索与对象的所有关系,然后根据结果制作您想要的任何东西。

/**
 * Retrieves all relation objects defined on this table.
 *
 * @return array
 */
public function getRelations()
{
    return $this->_parser->getRelations();
}

所以:

$relations = Doctrine_Core::getTable('SomeTable')->getRelations();

更多详情,here is the parser getRelations method

编辑:

如果你想尝试给定的关系,你可以使用hasRelation

【讨论】:

  • 我认为我的标题具有误导性。它应该说“在 ORM 中查找对象 A 是否与对象 B 有关系的最有效方法”
  • 我想查找表 A 中 ID 为“a”的行是否与表 B 中 ID 为“b”的行有关系。如果表 A 与表 B 有关系,我想你会回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
相关资源
最近更新 更多