Symfony (Hareket) bir tablo katılmak ve bir sorgu ile iki tablodan nesneyi almak için nasıl

1 Cevap php

Ben (Symfony içinde) Propel kullanarak iki katıldı MySQL tablodan ama bir sorgudaki verileri almak için kolay bir yol almaya çalışıyorum.

Diyelim ki bu basit bir şey söyleyeyim:

$comment = CommentPeer::RetrieveByPk(1);
print $comment->getArticle()->getTitle();
//Assuming the Article table is joined to the Comment table

Symfony bu halletmek için 2 sorguları arayacak. Yorum satır almak için ilk ve açıklama birine bağlı Madde satır almak için bir sonraki.

Şimdi, ben bir sorgu içindeki tüm emin olmak için bir yol bulmaya çalışıyorum. Ben kullanarak onlara katılmak için denedim

$c = new Criteria();
$c->addJoin(CommentPeer::ARTICLE_ID, ArticlePeer::ID);
$c->add(CommentPeer::ID, 1);
$comment = CommentPeer::doSelectOne($c);

Ama kullanarak Madde nesneyi almaya çalıştığınızda

$comment->getArticle()

Hala Madde satır almak için sorgu verecektir. Ben kolayca açık olabilecek tüm seçili sütunları ve gereken sütunları seçin ama bu beni İsterdim uskur nesneyi sorgunun ham sonucu sadece bir dizi vermezdim.

Peki nasıl sadece bir sorgu ile tablo katıldı, iki (veya daha fazla) bir kalabalık propel nesne alabilirim?

Teşekkürler,

JP

1 Cevap

Bunu yapmak için kullanabileceğiniz bir CommentPeer::doSelectJoinArticle() yöntemi olmalıdır. Eğer, o zaman muhtemelen MySQL InnoDB depolama motorunu ya da ben tavsiye şeydir veritabanı şema, yabancı anahtar başvuruları kullanarak değiliz yoksa - sadece uskur onun ürettiği bir model kodu bu ekstra JOIN yöntemleri eklemek sağlayacak , ancak bir ACID-compliant veritabanından birçok faydalar elde edecektir.

Alternatif CommentPeer::doSelectJoinArticle() yöntemi kendiniz yazmak - this link anlatacağız, ancak sürecin uzunluğu, ilk seçeneği tercih yapabilir :)