CakePHP: загрузить поле имени связанной модели в представлении

Ребята у меня простой, но скучный вопрос …
У меня есть следующий сценарий:

Solicitation -> HasMany -> Destiny

Destiny -> BelongsTo -> City

Моя проблема в представлении, я хочу получить название города вместо city_id, и я не могу понять.

Вот мой результат:

array (size=12)
'Solicitation' =>
array (size=32)
'id' => string '25' (length=2)
'Destiny' =>
array (size=2)
0 =>
array (size=3)
'id' => string '3' (length=1)
'solicitation_id' => string '25' (length=2)
'city_id' => string '4382' (length=4)
1 =>
array (size=3)
'id' => string '4' (length=1)
'solicitation_id' => string '25' (length=2)
'city_id' => string '4350' (length=4)

Как я могу получить название города на виде?

Вот мой контроллер:

public function mySolicitations()
{
$this->Solicitation->recursive = 1;
$person_id = $this->Auth->user('id');

$conditions = array(
'Solicitation.created_by' => $person_id
);

$this->set(array(
'data' => $this->paginate('Solicitation', $conditions, array('Solicitation.id' => 'DESC')),
'title_for_layout' => 'My Solicitations'
));
}

Есть ли проблема с моим отношением?
Заранее спасибо.

1

Решение

Есть два способа:

  1. Измените рекурсивное значение вашей модели на 2.

     $this->Solicitation->recursive = 2;
    

    Недостатком использования этого является то, что когда у вас довольно много ассоциаций, он будет получать много нежелательных ненужных данных.


  1. Вы можете использовать «Контейнерное» поведение здесь.

     $this->Solicitation->Behaviors->load("Containable");
    

И укажите названия моделей, которые вы хотите получить:

     $this->Solicitation->contain(array(
"Destiny", "Destiny.City")
);

Затем добавьте свой код:

    $conditions = array(
'Solicitation.created_by' => $person_id
);

$this->set(array(
'data' => $this->paginate('Solicitation', $conditions, array('Solicitation.id' => 'DESC')),
'title_for_layout' => 'My Solicitations'
));

Если вы выполните отладку, вы обязательно найдете индекс «City» в каждом подмассиве Destiny.

Надеюсь это поможет.

Мир! XD

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector