Cdetailview - Imie I Nazwisko Zamiast Id

Witam.

view DzieckoHasRodzic


<h1>View DzieckoHasRodzic #<?php echo $model->dziecko_id; ?></h1>


<?php $this->widget('zii.widgets.CDetailView', array(

	'data'=>$model,

	'attributes'=>array(

		//'dziecko_id',

                array('name'=>'dziecko.imie'),

		//'rodzic_id',

                array('name'=>'rodzic.imie'),

	),

)); ?>



Relacje - dziecko i rodzic maja HAS_MANY


public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

			'dziecko' => array(self::BELONGS_TO, 'Dziecko', 'dziecko_id'),

			'rodzic' => array(self::BELONGS_TO, 'Rodzic', 'rodzic_id'),

		);

	}

Problem

Próbuję wyświetlić w widoku Imie i Nazwisko, niestety nie mogę wykombinować jak to połączyć i nie wiem też jak dobrze sformułować pytanie w wyszukiwarce. Przeczytałem, że z BELOGNS_TO wystarczy dać model.kolumna a jak zrobić w przypadku jak chce użyć 2 kolumn ?

Nie wiem czy tak można, ale spróbuj takich atrybutów:


array('name'=>'dziecko.imie'.' '.'rodzic.nazwisko'),

array('name'=>'rodzic.imie'.' '.'rodzic.nazwisko'),

Już to sprawdzałem wcześniej i wywala błąd:


Property "Dziecko.imie dziecko" is not defined.

Jedyne co udało mi się zrobić to:

Zmieniając kod:


<?php $this->widget('zii.widgets.CDetailView', array(

	'data'=>$model,

	'attributes'=>array(

		//'dziecko_id',

                array('name'=>'dziecko.imie'),

                array('name'=>'dziecko.nazwisko'),

		//'rodzic_id',

                array('name'=>'rodzic.imie'),

                array('name'=>'rodzic.nazwisko'),

	),

)); ?>

oraz odpowiednio zmieniając attributeLabels() w modelu dziecka i rodzica. Nie zmienia to faktu, że jeżeli do dziecka przypisze 2 rodziców (bądź więcej) stanie się to bardzo nieczytelne.

Nie działa jak chcesz, bo to jest przecież relacja n:m, a nie 1:n. Modelu do tabeli dziecko_has_rodzic nie robisz w ogóle. W modelach do tabel dziecko oraz rodzic ustawiasz relacje MANY_MANY z tabelą łączącą dziecko_has_rodzic. Jak to zrobić napisane jest w dokumentacji (dokładnie pod linkami które wysłałem w innym Twoim temacie).

Na upartego możesz zadeklarować to jako 2 relacji 1:n za pomocą HAS_MANY oraz BELONGS_TO, ale żeby działało z automatu musiałbyś zadeklarować dodatkową relację z parametrem ‘through’. Jest to jednak w tym przypadku rozwiązanie nieprawidłowe, a piszę o tym jedynie, żeby zaznaczyć taką techniczną możliwość.

Powracając do kolebki tematu:


<?php $this->widget('zii.widgets.CDetailView', array(

	'data'=>$model,

	'attributes'=>array(

		array(

			'label'=>'Imię i nazwisko dziecka',

			'value'=>"{dziecko.imie} {dziecko.nazwisko}",

		),

		array(

			'label'=>'Imię i nazwisko rodzica',

			'value'=>"{rodzic.imie} {rodzic.nazwisko}",

		),

	),

)); ?>

Yii posiada świetną dokumentacje, która nie gryzie. http://www.yiiframework.com/doc/api/1.1/CDetailView#attributes-detail

Dzięki wielkie. Niestety nie potrafiłem wyczytać z dokumentacji rozwiązania dla tego przypadku. Nie poruszałbym tematu gdybym wcześniej nie próbował znaleźć sam rozwiązania.