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

时间:2012-04-17 16:51:33

标签: php mysql orm doctrine symfony-1.4

这是我的问题:

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

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

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

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

也许有一种模式或插件可以解决这个问题?

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

目前我想出了这个:

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

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

1 个答案:

答案 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