cakephp: как отобразить связанные записи связанных записей - PullRequest
1 голос
/ 25 февраля 2011

Моя цель - отобразить записи для связанной дочерней модели (после удаления) в представлении. Я понимаю, что установка рекурсивного значения в '1' возвращает текущую модель, ее владельца (ей) и связанные с ними модели.

Что я не знаю, как это сделать, это отобразить это в представлении.

Мой подход состоял в том, чтобы создать переменную в контроллере, содержащую значение соответствующего идентификатора модели, но это не сработало.

* Я должен также упомянуть, что я использую медлительное поведение для турниров, поэтому используется не $ id, а $ slug.

Вот подробности контроллера вида модели:

Модель

турнир - есть много деталей турнира

турнирДетали - имеет много обновлений

обновлений - принадлежит турнируDetails

контроллер турниров action = view

class TournamentsController extends AppController 

function view($slug = null) {
  if (!$slug) {
      $this->Session->setFlash(__('Invalid Tournament.', true));
      $this->redirect(array('action'=>'index'));
  }
$this->Tournament->recursive = 1;
$tournament = $this->Tournament->findBySlug($slug);
$updates = $this->Tournament->TournamentDetail->Update->find('all', array('conditions'=>array('update.tournament_detail_id' => $this->data['tournament_details'] ['id'] )) );
$this->set(compact('tournament','updates' ));

Просмотр турнира. Это отображает «детали турнира» и (в идеале) связанные детали турнира «обновления»

<h2><?php echo $tournament['Tournament']['name']; ?></h2>

<?php foreach ($tournament['TournamentDetail'] as $tournamentDetail): ?>
 <h1><?php echo $tournamentDetail ['title']; ?></h1>
 <p><?php echo $tournamentDetail ['body']; ?></p>
<?php endforeach; ?>

<?php foreach ($updates['Update'] as $update): ?>
 <h4>Update: <?php echo $update  ['date']; ?></h4>
 <p> <?php echo $update ['Update'] ['title']; ?></p>
 <p><?php echo $update ['Update'] ['body']; ?></p>
<?php endforeach; ?>

когда я отлаживаю обновления $, это все, что я вижу:

Array
(
)

Я не знаю, что я здесь делаю неправильно.

Не правильно ли построить условия поиска, используя:

 ('conditions'=>array('update.tournament_detail_id' => $this->data['tournament_details'] ['id'] )

Спасибо за помощь. Пол

1 Ответ

2 голосов
/ 25 февраля 2011

Вы можете использовать Containable Поведение, чтобы подробно указать, какие поля вы хотите получить из связанных моделей, связанных моделей для связанных моделей и так далее. Тогда вы найдете все данные внутри массива $tournament, как в примерах по ссылке.

РЕДАКТИРОВАТЬ (в ответ на комментарий ОП). Я думаю, что проблема может быть в использовании магического метода findBy. Вам необходимо заменить это стандартным find, как в этом примере

$tournament = $this->Tournament->find('first', array(
    'conditions' => array(
        'slug' => $slug
    ),
    'contain' => array(//Put here the settings for Containable
    )
));
...