2012-09-29 43 views
0

我有一個CakePHP應用程序,允許用戶與其他用戶成爲朋友。這是通過用戶表上的用戶表在用戶表上使用HABTM關係完成的。使用來自CakePHP的數據hasAndBelongsToMany關係

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

現在我的問題是當試圖展示這個列表,獲取朋友信息!

如果我做$朋友,我得到一個調試:

array(
    'User' => array(
     'password' => '*****', 
     'id' => '6', 
     'username' => 'test', 
     'email' => '[email protected]', 
     'firstname' => 'Test', 
     'lastname' => 'User', 
     (int) 0 => array(
      'password' => '*****', 
      'id' => '8', 
      'username' => 'johndoe', 
      'email' => '[email protected]', 
      '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]

任何的想法是什麼,我做錯了什麼?我假設這是在視圖中沒有正確使用數組的問題。

回答

0

我想你應該嘗試一下:

你會:

array(
    'User' => array(
     'password' => '', 
     'id' => '', 
     'username' => '', 
     'Friend' => array(
      0 => array(), 
      1 => array(), 
      2 => array() 
     ) 
    ) 
) 

在你看來:

<?php foreach ($friends['User']['Friend'] 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; ?> 

希望這有助於。

編輯

使用中可容納:

$this->User->Behaviors->load('Containable'); 

$this->User->contain('Friend' => array(
    'conditions' => array('Friend.status' => 1), 
    'User' 
)); 

$user = $this->User->read(null, $this->Auth->user('id')); 

$this->User->Behaviors->unload('Containable'); 
+0

怎麼樣的看法?我仍然得到相同的錯誤! – Cameron

+0

您需要遍歷'$ friends ['Friend']'數組。使用'debug()'來檢查。 –

+0

你能告訴我一個如何在視圖中列出這些數據的例子嗎? – Cameron

相關問題