0

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

例如我的表是

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 的用户

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

这就是我没有返回任何东西的东西:

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 查询,但我需要将查询限制为仅返回关联页面上 section_id 为 3 的用户。

4

1 回答 1

0

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

$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别名不在原始查询中。

于 2013-09-11T20:07:28.060 回答