使用Doctrine按特定列连接表

时间:2013-09-10 21:44:50

标签: php mysql doctrine symfony-1.4 left-join

我试图通过检查两个关联表中的变量来获取一个表的单个记录。

例如我的表是

user:
id   |  name 
3781 |  Foo Manchu

user_programs:
id    | user_id |  page_id
4150  | 3781    |  16974

Page
id     |  title   |   section_id
16974  |  Dudes   |   3

所以我需要查询并返回section_id为3的用户

用户与user_program表相关联,通过page_id与特定页面相关联。

这就是我没有回复的东西:

if($section_id == 3) {
      $q = $this->createQuery('u');
      $q->leftJoin('u.user_programs up');
      $q->leftJoin('up.Page p');
      $q->where('u.published=1 AND u.is_preview = 0 AND u.featured=1 AND fp.deleted_at IS NULL');

      $q->addWhere('p.section_id=?', $section_id);
      $q->orderBy('RAND()')->limit(1);

我可以在不进行连接的情况下成功返回u查询,但我需要将查询限制为仅返回关联页面为3的section_id的用户。

1 个答案:

答案 0 :(得分:0)

如果架构正确,那么用户应该有一个Pages(或类似的东西)关系。您可以像这样编写查询:

$query = $this->createQuery('u')
  ->innerJoin('u.Pages p')
  ->andWhere('u.published = ?', 1)
  ->andWhere('u.is_preview = ?', 0)
  ->andWhere('u.featured = ?', 1)
  ->addWhere('p.section_id = ?', $section_id)
  ->limit(1)
;

我删除了fp.deleted_at部分,因为使用SoftDelete时没有任何意义(我假设您使用了它)并且fp别名无论如何都不在原始查询中。