我试图通过检查两个关联表中的变量来获取一个表的单个记录。
例如我的表是
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的用户。
答案 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
别名无论如何都不在原始查询中。