0
私は3つのエンティティ、User、Specialist、Citationを持っています。私のデータベースでSymfony2 Querybuilder select
Specialist.php
/**
*
* @ORM\OneToMany(targetEntity="Citation", mappedBy="specialist")
*/
protected $citation;
User.php
/**
* @ORM\OneToMany(targetEntity="Citation", mappedBy="user", cascade={"remove"})
*/
protected $citation;
Citation.php
/**
* @ORM\ManyToOne(targetEntity="Specialist", inversedBy="citation")
* @ORM\JoinColumn(name="specialist_id", referencedColumnName="id")
*/
protected $specialist;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="citation")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
私は、これらのレジストリを持っている:
スペシャリストテーブル:
+----------+----------------+
| id | name |
+----------+----------------+
| 1 | Specialist One |
| 2 | Specialist Two |
+----------+----------------+
Userテーブル:
+----------+----------+
| id | name |
+----------+----------+
| 1 | User One |
+----------+----------+
引用テーブル:
+----------+--------------+---------------+---------+
| id | name | specialist_id | user_id |
+----------+--------------+---------------+---------+
| 1 | Citation One | 1 | 1 |
+----------+--------------+---------------+---------+
私は、ユーザー1で引用していないすべてのスペシャリストを取得する必要があります。
私はこの1つにしようとすると、SpecialistRepository.php:
public function findSpecialistCitationWithUser($user) {
$query = $this->createQueryBuilder('s')
->leftJoin('s.citation', 'c')
->where('c.user = :user')->setParameter('user', $user)
->getQuery()
;
return $query->getResult();
}
See it working at SQL Fiddle. 戻りSpecilistユーザーが引用されています。
私はこのQuerybuilderで成功せずにしようとしている、SpecialistRepository.php:
public function findSpecialistNoCitationWithUser($user) {
$query = $this->createQueryBuilder('s')
->leftJoin('s.citation', 'c')
->where('c.user <> :user')->setParameter('user', $user)
->getQuery()
;
return $query->getResult();
}
See it working at SQL Fiddle. 戻りなしの結果、空。 @geoBの助けを借りて
これは 'IN(c1_.user_id =引用c1_ FROM c1_.specialist_idを選択しないc0_.idスペシャリストc0_ SELECT * FROMで行うことができます1) '。残念ながら、Doctrineはサブクエリに対応していません。しかし、このための回避策があります。 – geoB
IMO結果が正しい。あなたはそのような専門家を持っていません。あなたがデータベースに持っているすべての専門家は、ユーザー1との引用をしています。 '2 |引用2 | 2 |あなたの引用表にあなたの結果セットの専門家2が得られます。 – Wilt
ありがとうございます@geoBあなたの質問はOKです、私は正しいコードで更新されます。 http://sqlfiddle.com/#!9/e2d18/5 –