Aynı sınıfa PHP / Doktrini ORM birden fazla 'one-to-one' ilişkileri

4 Cevap php

Sadece ben 'Ürün' ve 'Resim' adlı bir sınıf adında bir sınıf var, bir proje üzerinde çalışıyor. Her ürün görüntülerin iki tür, bir 'ön' imajını ve 'geri' bir görüntü var, bu yüzden iki alan, image_front_id denilen bir ve image_back_id denilen bir tarif.

Aşağıdaki gibi yöntem BaseProduct :: kurulumunda (), ben ön görüntüler için ilişkiyi tanımlamıştır:

$this->hasOne( 'Image', array ('local' => 'image_front_id', 'foreign' => 'id' ) );

Ben 'image_back_id' yerel fieldname ile artık sınıf 'Image' başka 'hasOne' tanımlamak, ancak Şimdi, belli ki, bu doğru çalışmıyor. Yani benim soru: nasıl birden çok 'tek-bir' ilişkileri aynı sınıfa tanımlayabilirsiniz? Ben bir süredir bu arıyor oldum, ama onu bulmak için görünmüyor olabilir.

4 Cevap

right cevap

$this->hasOne('Image as FrontImage', array('local' => 'image_front_id', 'foreign' => 'id'));
$this->hasOne('Image as BackImage', array('local' => 'image_back_id', 'foreign' => 'id'));

Eğer ilişki için çalışıyoruz 2 farklı tablo varsa Zed cevabı çalışır, ancak aynı tabloda iki alan ilgili çalışıyorlar gibi geliyor. Arthur Frankel çözümü sizin için çalışması gerekir. Sen aynı ada sahip birden fazla ilişkileri olamaz, böylece aynı Görüntü tabloya 2 farklı ilişkileri almak için takma ad kullanmak zorunda. Ve 'Image BackImage olarak' FrontImage olarak resim 'ilan ederek, her ilişki kendi ad vardır.

Eğer doğru hatırlıyorsam, ilk parametre referans adıdır ve başvurulan sınıf refClass özelliği tarafından verilir:

$this->hasOne('FrontImage', array('local' => 'image_front_id', 'foreign' => 'id', refClass => 'Image' ));
$this->hasOne('BackImage', array('local' => 'image_back_id', 'foreign' => 'id', refClass => 'Image' ));

Ben aşağıdaki gibi bir çözüm (anahtar kelime 'olarak' kullanarak) olduğuna inanıyorum:

$this->hasOne('Image as FrontImage', array('local' => 'image_front_id', 'foreign' => 'id', refClass => 'Image' ));
$this->hasOne('Image as BackImage', array('local' => 'image_back_id', 'foreign' => 'id', refClass => 'Image' ));