2011-02-20 3 views
2

Моя цель - отобразить записи для дочерней дочерней модели (после удаления) в представлении. Моя проблема в том, что я получаю сообщение об ошибке «Уведомление (8): Неопределенный индекс:», когда я пытаюсь вывести следующий запрос.cakephp: как визуализировать связанные модели в представлении

Турниры имеют много турнировДетали и турнирыДетали имеют много обновлений. Я пытаюсь отобразить все обновления для каждого турнира, который отображается на экране турниров.

Так что мой вопрос заключается в том, как правильно разрешить сообщение об ошибке и отображать обновления для каждого турнираДетали на странице просмотра турниров.

Моя находка данных в представлении контроллер действия «Турниры» является:

$updates = $this->Tournament->TournamentDetail->Update->find('all', array('tournament_details.tournament_id'=> $this->data['Tournament']['id'])); 

В представлении, у меня есть этот код.

<?php foreach ($tournament['Update'] as $update): ?> 
<h3>Updates</h3> 
<h1><?php echo $update ['title']; ?></h1> 
<p><?php echo $update ['body']; ?></p> 
<hr/> 
<?php endforeach; ?> 

Это тот же код «foreach», который я использую для других связанных дочерних записей без проблем. Я использовал функцию debug() для исследования, но не понял, чего я не вижу.

Вывод массива $ обновления от функции отладки выглядит следующим образом:

Array 
(
    [0] => Array 
     (
      [Update] => Array 
      (
       [id] => 1 
       [title] => first round matches start today 
       [date] => 2010-03-19 
       [body] => this tournament's first round matches start today. 
       [tournament_detail_id] => 4 
       [homeStatus] => no 
      ) 

Есть специальный способ отображения записей в этом глубокие?

Как всегда, заранее. Пол


Обновление: февраль 23/11 После некоторого тестирования проблемы, я, кажется, нахожу и передавая правильное значение переменных $ обновления;

Подводя итог, я хочу, чтобы переменная $ updates сохраняла текущий 'tournament_details_id'. Затем будут отображаться соответствующие записи обновлений в представлении «турниры».

Я все еще новичок и, скорее всего, не замечал очевидного.

Вот информация модель:

class Tournament extends AppModel { 
var $name = 'Tournament'; 
var $hasMany = array(
    'TournamentDetail' => array(
    'className' => 'TournamentDetail', 
'foreignKey' => 'tournament_id',) 


class TournamentDetail extends AppModel { 
var $name = 'TournamentDetail'; 
var $belongsTo = array(
    'Tournament' => array(
     'className' => 'Tournament', 
     'foreignKey' => 'tournament_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 

class Update extends AppModel { 

var $name = 'Update'; 
var $belongsTo = array(
     'TournamentDetails' => array(
     'className' => 'TournamentDetails', 
     'foreignKey' => 'tournament_detail_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 

Контроллер данных:

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('tournament_details_id' => $this->data['TournamentDetails']['id']))); 

$this->set(compact('tournament','updates', $updates)); 

Tournament вид. Это отображение «Информация о турнире» и (в идеале), связанные с турнира подробности «обновления»

<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; ?> 

Я проверил это, добавив в «ид» ПОДРОБНО.Подробнее Турнирные как целое, и это тянет правильный «обновление 'запись. Однако у меня, похоже, проблемы с настройкой операции поиска, чтобы сделать то же самое.

Как всегда, я ценю помощь.

Благодаря Пол

+0

Там в nothi ng special о выводах * связанных записей, но может быть сложно найти их. Однако ответить на эту информацию невозможно. Как связаны ваши модели, какие из них вы хотите найти, какие данные вы точно получаете и чего не хватает? – deceze

+0

Можете ли вы вставить данные из массива '$ updates'? – Stoosh

+0

После некоторого тестирования проблема, с которой я, похоже, передаю правильное значение операции «Найти». Может ли кто-нибудь исправить меня с добавленной информацией в вопросе. – Paul

ответ

1

Основываясь на вашем отладочный вывод, кажется, что переменные $ турниров состоит из массива (вместо ассоциативного массива), так что вы можете использовать foreach для доступа к каждому из этих элементов:

foreach ($tournaments as $update): 
?> 
    <h3>Updates</h3> 
    <h1><?php echo $update ['Update']['title']; ?></h1> 
    <p><?php echo $update ['Update']['body']; ?></p> 
    <hr/> 
<?php endforeach; ?> 
+0

Да. Данные находятся в $ update ['Update'] ['title'] и т. Д. –

+0

Когда я пытаюсь выполнить приведенный выше код, я получаю эту ошибку: Предупреждение (512): Ошибка SQL: 1054: Неизвестный столбец «tournament_details_id» в разделе «where». – Paul

0

Похоже, что вы используете неправильную переменную, вы говорите о переменной $updates, но вы используете переменную $tournament с вашей точки зрения.

<?php foreach ($updates['Update'] as $update): ?> 
<h3>Updates</h3> 
<h1><?php echo $update ['title']; ?></h1> 
<p><?php echo $update ['body']; ?></p> 
<hr/> 
<?php endforeach; ?> 

Кроме того, вы не выложили весь метод контроллера, который включает в себя, что найти, но вы не могли бы отправлены данные в представлении еще ни

$this->set(compact('updates')); 
Смежные вопросы