2012-03-01 10 views
0

私のアプリでは、ユーザーにプロフィールがあり、ユーザーはコメントと投稿を投稿できます。CakePHP:3レベルディープアソシエーションが正しく動作しない

投稿のコメントリストを表示するときに、コメントを投稿したユーザーの名前を表示したいとします。

<?php if (! empty($post['Comment'])): ?> 
     <ul> 
      <?php foreach ($post['Comment'] as $comment): ?> 
      <li id="comment-<?php echo $comment['id']; ?>"> 
       <h3><?php echo $this->Html->link($comment['User']['Profile']['firstname'] . ' ' . $comment['User']['Profile']['lastname'], array('controller'=>'profiles','action'=>'view','userName'=>$comment['User']['username'])); ?></h3> 
       <?php echo $comment['content']; ?> 
       <?php echo $comment['datetime']; ?> 
      </li> 
      <?php endforeach; ?> 
     </ul> 
     <?php else: ?> 
     <p>No comments...</p> 
     <?php endif; ?> 

をしかし、私は次のエラーを取得:私は次のことを試してみました問題を解決する方法についてUndefined index: User [APP/View/Posts/view.ctp, line 37]

任意のアイデア?私は、コントローラのメソッドのために、以下のいる

:私は罰金のコメントを見ると、ポスト自体のプロファイル情報を見ることができるように

function view ($id = null, $slug = null) 
    { 
     $post = $this->Post->find('first',array('contain'=>array('Comment','User'=>array('Comment','Profile')),'conditions'=>array('Post.id'=>Tiny::reverseTiny($id)))); 

     if (!$post) 
     { 
      throw new NotFoundException('404'); 
     } 
     else if($post['Post']['status'] == '0') // 0=draft 1=open 2=open 
     { 
      if($post['Post']['user_id'] == $this->Auth->user('id')) 
      { 
       $this->Session->setFlash('Your post has NOT been published yet'); 
      } 
      else 
      { 
       throw new NotFoundException('404'); 
      } 
     } 

     if (Inflector::slug($post['Post']['title']) != $slug || $slug = null) 
     { 
      $this->redirect(array('id'=>Tiny::toTiny($post['Post']['id']),'slug'=>Inflector::slug($post['Post']['title']))); 
     } 

     $this->set(compact('post')); 
    } 

モデル協会はすべて正しいはずですが、それだけで、コメントをだとドンプロファイル情報を表示しません。

お手数をおかけしていただきありがとうございます。あなたのforeachの中で$commentとして$post['Comment']を設定している

答えて

1

ユーザーデータが$post['Comment']['User']ではなく$post['User']ではないながら、そのインデックスが存在しないため、その$comment['User']との通話は、動作しません。

将来的にdebug($var)を使用すると、特定の瞬間にアレイ構造がどのように見えるかを確認できます。

+0

この問題を解決するにはどうすればよいでしょうか? '$ post ['User']'は投稿ユーザであり、 '$ comment ['User']'をコメントユーザとして使用する必要があります。 – Cameron

+0

コードの先頭に 'debug($ post)'を置くと、配列構造がはっきりしているので、その点から分かります。 foreachブロックに 'debug($ comment)'を置くこともできるので、foreachブロックに含まれる情報を見ることができます。あなたはこの情報でそれを理解してくれることを願っています。 – pbond

+0

ここに行くと、http://beta.favorr.me/posts/ugsdu_goushgsdug_usghu_sdfuhsuhu-1eL88Qにデバッグ情報が表示されます。私は修正を理解していないよ。もしあなたが助けることができたら。私は本当にそれを感謝します。ありがとうございました – Cameron