5

Bunu:Doctrine 2'deki Varlık ilişkisi ile nasıl çalışıyorsunuz? Bir Varlık eklemek istediğinizde

$user = new User(); 
$user->setEmail('[email protected]'); 

$em->persist($user); 
$em->flush(); 

Ama bir kullanıcı olabilir bir makale oluşturmak istiyorsanız neyi;

Şu anda, yapmanız gerekir:

$user = $em->getRepository('User')->find($id); 
$article->setUser($user); 

Bunun nedeni ilişkinin olduğunu Doktrin 2 bir kullanıcı varlık için sorar. Ben id nedenle ben yapamaz, manuel olarak ayarlanabilir istemiyoruz çünkü

Ancak, ben değil "sahte" bir Kullanıcı nesnesi, olabilir:

$user = new User(); 
$user->setId(45); 

bu konuda yanlış mıyım davranış, nasılsın?

Kullanıcı varlığı, yalnızca bir güncelleme için her zaman bir seçenek olamayan bir önbellekle bile ilişkiyi kurmak için Kullanıcı öğesinin yüklenmesiyle başa çıkabilir.

cevap

10

, ne istediğini EM vermek için mutlu olacak bir reference proxy şöyledir:

<?php 
$article = new Entity\Article(); 
$article->setTitle('Reference Proxies Rule'); 
$article->setBody('...'); 
$article->setUser($em->getReference('Entity\User',45)); 
$em->persist($article); 
$em->flush(); 
+0

Awesome, teşekkürler (tekrar!) – JohnT

+0

Lol Tim, yine bu zor 'getReference() 'işleviyle günü kurtarıyor. BTW - Yazım hatası '$ em() '. – Cobby

+0

@Cobby - açıkça belgelendirilmiş, ancak genellikle gözden kaçan bir özellik gibi görünüyor. Belki de hepsinden sonra için iyi bir kullanım çantası bulduk. Typofix için teşekkürler. – timdev

-1

Makaleniz, bir Kullanıcı'nın öncelikle bir kimlik sahibi olmasını gerektiriyor mu? Varlıklarınızı EntityManager olmadan test edebilmelisiniz, eğer yapamıyorsanız muhtemelen yanlış bir şey yapıyorsunuz demektir. Daha sonra fonksiyonel ünite testleri yaptığınızda, simple as this.

Zend Casts'in Unit Testing Doctrine 2 Entities numaralı telefonunu izlemenizi öneririm. Eğer kullanışlı bir yönetilen Kullanıcı varlık yoksa

+1

Peki, yani sorun değil ya mevcut Kullanıcı veya değil, eğer makalemi mevcut bir Kullanıcı ile güncellemek istersem, önce Kullanıcı varlığını daha önce getirmem gerekir, aksi takdirde Kullanıcı'mın bir kimliği yoksa Doctrine2'nin kullanıcı hakkında nasıl bilgi sahibi olabileceğini? Makalemin kesinlikle bir Kullanıcının geçerli olması gerekmez. Bir varlığın kendi kimliğini belirleyememesine ve dolayısıyla bir Kullanıcı nesnesiyle dalga geçmesine izin veremeyeceğimi söylüyorum. – JohnT

+0

Btw, bağlantı için teşekkürler, ancak zaten bu screencast biliyorum ama Ben Varlıklar Birim Testi ile ilgili gerçekten yararlı bulamadık. – JohnT