Doctrine 2.1'de OOP doğruluğunun sonucu olabilecek ciddi bir işlevsellik eksikliği ile ilgili pek çok cevaba baktım. ilişkisel akıl yürütme.Doctrine 2.1 Burada yabancı anahtar kimliği = ?, Düzenleme: Sabit Doktrinde 2.2
Çoktan bir ilişki, Makaleler ve Üyeler içeren iki tablo var. Bir üye birçok yayınlanan makaleye sahip olabilir. sahibi olan tarafında ek açıklama ı üyesi 6 için tüm aktif makaleleri almak istiyorum
/**
* @var \Member
* @ORM\ManyToOne(targetEntity="Member")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="member_id", referencedColumnName="id")
* })
*/
private $member;
olduğunu bu SQL basit bir sorgu: Ben idi
$rep = $this->getDoctrine()->getRepository('SMWMemberBundle:Article');
$q = $rep->createQueryBuilder('a')
->leftJoin('a.member','m')
->where('m.id = ?1')
->andWhere('a.active = 1')
->orderBy('a.id', 'DESC')
->setParameter(1, $id)
->getQuery();
ile sona
SELECT * FROM mbr_article
WHERE active = 1 AND member_id = 6
ORDER BY article_id DESC
oluşturulan
SELECT m0_.id AS id0, m0_.active AS active1, m0_.update_time AS update_time2,
m0_.content AS content3, m0_.member_id AS member_id4
FROM mbr_article m0_
LEFT JOIN mbr_member m1_ ON m0_.member_id = m1_.id
WHERE m1_.id = ? AND m0_.active = 1
ORDER BY m0_.id DESC
ve muhtemelen çok daha yavaş çalışıyor, ancak daha önce Üye nesnesine sahip olduğum için JOIN'e gerek yok. Diğer yolu denediğimde, tüm makaleleri sadece aktif olanları değil.
getEntityIdentifier
'u kullanan Can you get a foreign key from an object in Doctine2 without loading that object? gibi yanıtları gördüm ve 2.2'de IDENTITY(member)
diyebilirim.
Doktrin 2.1'de bunu yapmak için makul bir yol var mı? Geliştirme, sorgu oluşturucuda andWhere('IDENTITY(member) = ?')
'a izin verecek mi?
Düzenleme: @Ocramius için
Teşekkürler, -> ('? KİMLİK (a.member) = 1') Doktrin çalışma 2.2
İlk, 2.1 artık destek yok düşünün: yükseltmeyi düşünmelisiniz. Her neyse, tanımlayıcıyı bir proxy'den geri almak, yöntem adı "alınıyorsa" yüklenmesine neden olmaz. ucfirst ($ alanAdı) ' – Ocramius
@Ocramius Teşekkür ederiz,' -> nerede ('KİMLİK (a.member) =? 1') 'Doctrine 2.2'de çalışıyor mu, lütfen bunu bir cevap olarak gönderir misiniz ve kabul edeceğim . –
Kendiniz ekleyin ve çözümü kendiniz bulduktan sonra kabul edin;) – Ocramius