私は2つのエンティティPersonとNurseryを持っており、それらの間にManyToMany
の関係がJoinTable
です。 staff_idとスタッフを見つけ、彼はにリンクされていることを確認してください)Doctrineクエリービルダーが間違った結果を返しました
1)すべてのスタッフ(=人)がnursery_id
select p.* from person p inner join nursery_staff ns on p.id = ns.staff_id inner join nursery n on ns.nursery_id = n.id where n.id=1 and p.nursery_staff_role <> 'MANAGER';
2で保育園にリンクして下さい:私はこの2つのSQLクエリを作成したいです
1)
:そのためにnursery_idselect p.* from person p inner join nursery_staff ns on p.id = ns.staff_id inner join nursery n on ns.nursery_id = n.id where n.id=2 and p.id=4 and p.nursery_staff_role <> 'MANAGER';
と保育園は、私がPersonRepositoryで、この2つのクエリを持っています
public function findAllStaffLinkedToANursery($nursery_id)
{
$qb = $this->_em->createQueryBuilder();
$qb->select('p')
->from($this->_entityName, 'p')
->innerJoin('VSCrmBundle:Nursery', 'n')
->where('n.id = :id')
->andWhere('p.nurseryRole <> :profession')
->setParameters(array('id' => $nursery_id, 'profession' => 'MANAGER'));
return $qb->getQuery()->getResult();
}
2)
public function findOneByNurseryAndStaffId($nursery_id, $staff_id)
{
$qb = $this->_em->createQueryBuilder();
$qb->select('p')
->from($this->_entityName, 'p')
->innerJoin('VSCrmBundle:Nursery', 'n')
->where('p.id = :pid')
->andWhere('n.id = :nid')
->andWhere('p.nurseryRole <> :staffRole')
->setParameters(array(
'pid' => $staff_id,
'nid' => $nursery_id,
'staffRole' => 'MANAGER'
));
return $qb->getQuery()->getOneOrNullResult();
}
しかし、クエリがnursery_idの気にしない、それは私にnursery_idのundependedスタッフを与えることの両方のケースで
。たとえば、id = 4のPersonはid = 2の保育園にリンクされていませんが、このクエリはこの人を示しています。EDIT: 私はDQLクエリと同じ結果を持っている:
php bin/console doctrine:query:dql "select p.email from VSCrmBundle:Person p inner join VSCrmBundle:Nursery n where n.id=2 and p.nurseryRole <> 'MANAGER'"
私はこのエラーを取得:[意味論的エラー]行0、列を64近くの 'n WHERE n.id':エラー:クラスVS \ CrmBundle \エンティティ\人保育園 –
ができるという名前の関連性を持っていませんあなたはPersonエンティティを投稿しますか?私が言ったように、あなたがそれに参加することを望んでいないなら、Personは属性の保育園を必要とします – Sepultura