この SQL を DQL またはクエリ ビルダーのバリアントがどのように見えるかに変換しようとしています。
select *
from project_release r
where (select s.title as status_name
from release_status_log l
left join release_status s
on l.release_status_id = s.id
where l.release_id = r.id
order by l.created_at desc
limit 1
) not in ('Complete', 'Closed')
;
エンティティのリポジトリクラス内からRelease
、これを試しました
return $this->getEntityManager()->createQuery("
select r.*
from MyBundle:Release r
where (select s.title
from MyBundle:ReleaseStatusLog l
join l.status s
where l.release = r
order by l.createdAt desc
limit 1
) IN ('Complete','Closed')
order by r.release_date ASC
limit 10
")->getArrayResult();
エラーが発生する
[構文エラー] 行 0、列 265: エラー: 予想される Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS、get 'limit'
これはlimit 1
、サブクエリで参照しています。
それで、私はこれを試しました
return $this
->createQueryBuilder('r')
->select('r.*')
->where("(select s.title
from MyBundle:ReleaseStatusLog l
join l.status s
where l.release = r
order by l.created_at desc
limit 1
) $inClause ('Complete', 'Closed')
")
->setMaxResults( $limit )
->orderBy('release_date', 'ASC')
->getQuery()
->getArrayResult()
;
同じエラーが発生します。親クエリの行ごとに 1 行に制限されたサブクエリを実行するにはどうすればよいですか?
- シンフォニー 2.0.15
- 教義 2.1.7
- PHP 5.3.3
- MySQL 5.1.52