ユーザーが他のユーザーと友達になれるようにする CakePHP アプリがあります。これは、ユーザー テーブルの HABTM リレーションシップを使用して、結合用の friends テーブルを介して行われます。
friends テーブルには、id、user_id、friend_id、および status フィールドがあります。
この関係のモデルは次のようになります。
public $hasAndBelongsToMany = array(
        'User'=>array(
            'className'              => 'User',
            'joinTable'              => 'friends',
            'with'                   => 'Friend',
            'foreignKey'             => 'user_id',
            'associationForeignKey'  => 'friend_id'
        )
    );
たとえば、ログインしているユーザーの友達を一覧表示する場合は、次のようにします。
$user = $this->User->find('first', array('conditions' => array('User.id' => $this->Auth->user('id'))));
        $friends = $this->User->find('first', 
            array(
                'conditions'=>array(
                   'User.id'=>$user['User']['id']
                ),
                'contain'=>array(
                    'User'=>array(
                        'conditions'=>array(
                            'Friend.status'=>1
                        )
                    )
                )
            )
        );
    $this->set('friends', $friends);
今、私が抱えている問題は、このリストを表示しようとして、友達の情報を取得することです!
$friends でデバッグすると、次のようになります。
array(
    'User' => array(
        'password' => '*****',
        'id' => '6',
        'username' => 'test',
        'email' => 'test@test.com',
        'firstname' => 'Test',
        'lastname' => 'User',
        (int) 0 => array(
            'password' => '*****',
            'id' => '8',
            'username' => 'johndoe',
            'email' => 'john@doe.com',
            'firstname' => 'John',
            'lastname' => 'Doe',
            'Friend' => array(
                'id' => '1',
                'user_id' => '6',
                'friend_id' => '8',
                'created' => '0000-00-00 00:00:00',
                'status' => '1'
            )
        )
    )
)
では、どうすれば友達のリストを表示できますか? 私がやっているように:
<?php foreach ($friends as $friend) : ?>
        <li><?php echo $this->Html->link($friend['User']['firstname']. ' '. $friend['User']['lastname'], array('controller'=>'users','action'=>'view','userName'=>$friend['User']['username'])); ?></li>
    <?php endforeach; ?>
しかし、私はただ得ます:Undefined index: User [APP/View/Friends/index.ctp, line 44]
私が間違っているのは何ですか?ビューで配列が適切に使用されていないことに関係していると思います。