查找“a”行是不是与 ORM 中的“b”行有关系的最有效方法?

Posted

技术标签:

【中文标题】查找“a”行是不是与 ORM 中的“b”行有关系的最有效方法?【英文标题】: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;

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

【问题讨论】:

我觉得我没有正确解释我的问题...对你有意义吗? 【参考方案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 有关系,我想你会回答

以上是关于查找“a”行是不是与 ORM 中的“b”行有关系的最有效方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 >2 个表上进行外部联接 (Oracle)

查找存在于两个不同表中的单个行

Django ORM 与 Oracle 的性能不佳

统计代码行数

Mybatis处理表关联(懒加载)

Armitage主屏幕说明与命令行启动