2016-04-07 20 views
1

üzerine yazıyor Doktrin kayıt sınıflarımdan birinde, bir denetim gerçekleştiren bir preSave yöntemim var. Bu kontrolde, kaydımın ait olduğu aynı tabloda bir sorgu yapılır. Bu sorgu, tablodan bir kayıt getirecek ve sınıf tarafından temsil edilen mevcut kayıtla karşılaştırmak için hidratlı sonucu kullanıyorum.Bir Doktrin kayıt sınıfının içinden, DB'den aynı kaydın sorgulanması, o sınıftaki özellikleri

Bazı durumlarda, getirilen hidratlı sonuç, preSave denetiminde çalıştığım ile aynı kayıt olacaktır. Ancak, bu olduğunda, sorgu tamamlandıktan sonra ilk kayda yaptığım değişiklikler geri alınır.

Bu neden oluyor? Bir çözüm var mı?

cevap

1

Doktrin, kayıt nesnesi örneğine tek bir başvuru yapıyor olabilir ve preSave() yönteminizde yepyeni bir örnek oluşturmuyor olabilir. Böylece nesne hidrate olduğunda, kodunuzdaki aynı türden başka değişkenler de 'yenilenir'.

Bunu doğrulamak için spl_object_hash() işlevini kullanarak kodunuzdaki değişkenlerin nesne kimliklerini inceleyin.

kodunuzu görmeden, geçici çözüm önerileri değişebilir, ancak olası bir çözüm preSave() bir diziyi hidratlamaktır: Bir nesne olarak sonuç kullanmak kaybedersiniz.END_PARAGRAPH

$query = Doctrine_Query::create() 
->select('foo') 
->from('Bar b') 
->where('b.id = ?', $id); 

$results = $query->execute(array(), Doctrine::HYDRATE_ARRAY); 

ancak Karşılaştırma için dizinin içeriğini kullanabilecektir.

İlgili konular