2016-04-01 15 views
1

PHP ActiveRecord'da basit olması gereken ancak imkansız görünen bir şey elde etmeye çalışıyorum.PHP ActiveRecord'da Model örneği olarak bir öznitelik değeri nasıl alınır?

Oluşturduğum basitleştirilmiş örnekte, İki modelim var: Kişi ve Değişim ve iki tablo, people(id, name) ve exchange(id, user_from_id, user_to_id, comment). exchange.user_from_id ve exchange.user_to_id, people.id başvurulan yabancı anahtar kısıtlamasına sahiptir.

$exchange = Exchange::first(); 
echo $exchange->user_from_id; 
echo $exchange->user_from_id->name; 

İlk echo başarısız beklenir ikincisi başarılı:

yüzden aşağıdaki kodu çalıştırdığınızda. Bunun yerine, birincisi exchange.user_from_id litteral değerini başarılı bir şekilde basar ve basar sonra ikinci bir "Nesne olmayan nesnenin özelliğini almaya çalışmak" uyarısı üretir. $exchange->user_from_id Kişi sınıfının bir örneğini döndürür, böylece

benim kodunda değişiklik gerekenler
static $belongs_to = array(
    array('user_from_id', 'class_name' => 'Person'), 
    array('user_to_id', 'class_name' => 'Person') 
); 

bunu yapmak için:

sonuç ile veya Exchange için aşağıdaki eklemeden aynıdır?

cevap

1

Nasıl çalıştığını yanlış anladım. Modelin bir özelliğinin bir özelliğe karşılık gelen bir modele bir şekilde bağlı olduğunu düşünmüştüm ama şimdi fark ettim ki, yeni bir özellik yaratıyor. Bu, daha sonra foreign_key seçeneğini kullanarak bir öznitelik ile açık bir şekilde ilişkilendirmeniz gerekiyor.

static $belongs_to = array(
    array('user_from', 
      'class_name' => 'Person', 
      'foreign_key' => 'user_from_id'), 
    array('user_to', 
      'class_name' => 'Person', 
      'foreign_key' => 'user_to_id') 
); 

Sonra bu kodu kullanarak: Sonunda beklediğim var

$exchange = Exchange::first(); 
echo $exchange->user_from; 
echo $exchange->user_from->name; 

: İlk üzerinde önemli bir hatayla

Somut olarak, bu ben Exchange eklemek zorunda budur echo ve ikincisi, people.id = exchange.user_from_id'da people.name.

$exchange = Exchange::first(array('include' => array('user_from', 'user_to'))); 
:

Bu, aynı zamanda, iki people nesnelerin istekli yükleme kullanmak mümkün kılan

İlgili konular