cakephp: как визуализировать похожие модели в представлении - PullRequest
2 голосов
/ 21 февраля 2011

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

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

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

Мои данные поиска в действии представления контроллера 'турниров':

$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 () для расследования, но не увидел, чего мне не хватало.

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

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;

Подводя итог, я хочу, чтобы переменная $ updates содержала текущее значение tour_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 ));

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

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

Я проверил это, добавив в подробности турнира 'id' в виде целого числа, и он установил правильную запись 'update'. Однако, похоже, у меня проблемы с настройкой операции поиска, чтобы сделать то же самое.

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

Спасибо Пол

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Судя по вашим выводам отладки, ваша переменная $ tournaments состоит из массива (вместо ассоциативного массива), поэтому вы можете использовать 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 голосов
/ 21 февраля 2011

Похоже, что вы используете не ту переменную, вы говорите о переменной $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'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...