Как получить данные от связанных моделей в CakePHP? - PullRequest
1 голос
/ 11 июля 2011

Я создаю простой блог с cakephp, где у меня есть несколько постов и несколько комментариев.После того, как я запекаю приложение, оно создает папку comments с папкой index.ctp и posts с the index.ctp

. Я хочу отобразить их следующим образом:

Post1
  comment1
  comment2
Post2
  comment1
  comment2

Если я размещаю комментарии внутри posts / index.ctp, я получаю сообщение об ошибке, сообщающее, что $comments не определено.

Как я могу это сделать?Спасибо

edit: хорошо, я извиняюсь за возвращение, но это все еще немного неясно.У меня есть настройка отношений $hasMany, фактически на странице, где отображаются сообщения, на которые у меня есть ссылка, указывающая на комментарии.Единственное, что я хочу, чтобы они отображались на той же странице, что и сообщения.

Я должен иметь возможность сказать <?php echo $comment['Comment']['content']; ?>

1 Ответ

4 голосов
/ 11 июля 2011

Проверьте свои контроллеры.

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

Способ "CakePHP"это определить отношения между моделями.Проверьте свои запеченные модели и посмотрите, есть ли что-то вроде этого:

class Post extends AppModel{

var $hasMany = array( 'Comment' );

}

Когда модели связаны друг с другом, ваш контроллер сообщений автоматически найдет объекты Post и связанные с ними объекты Comment.

Например, эта строка:

$this->Post->findById( $id );

будет производить что-то вроде этого:

Array
(
    [Post] => Array
    (
        [id] => 42
        [text] => Post1
    )

    [Comment] => Array
    (
        [0] => Array
        (
            [id] => 1
            [post_id] => 42
            [text] => Comment1
        )

        [1] => Array
        (
            [id] => 2
            [post_id] => 42
            [text] => Comment2
        )
    )
)

Хорошая документация на http://book.cakephp.org/

РЕДАКТИРОВАТЬ: Добавление дополнительной информации после вашего комментария

Покамодели имеют связь, CakePHP будет извлекать данные соответствующим образом (если вы не установите Recursive => false или не используете Containable, который, как я полагаю, вы не используете).

Проверьте свой контроллер PostsController и посмотрите, как он загружает данные.Я предполагаю, что он делает что-то вроде следующего:

$post = $this->Post->findById( $id );
$this->set( compact( 'post' ) );

или

$this->data = $this->Post->findById( $id );

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

Например, если он хранит данные в переменной с именем "$ post", вы должны поместить что-то вроде этого в ваше представление:

// output the 'text' field of the 'post' object
echo $post[ 'post' ][ 'text' ];  

// loop through associated comments
foreach ( $post[ 'comment' ] as $comment ){  

    //output the 'text' field of a 'comment' object
    echo $comment[ 'text' ];  

}

По умолчанию CakePHP хранит тонны деталейв массивах после извлечения данных.Хитрость заключается в том, чтобы знать иерархию данных и извлекать их из массива соответственно.

...