2015-05-13 22 views
2

我有2個用戶和畫廊,關係就像User hasMany Gallery.But在某些情況下查詢用戶模型時,我想獲得最新的Gallery畫廊,即id爲2的畫廊,而不是多排。將hasMany轉換爲cakephp中的hasOne

Array 
 
(
 
    [User] => Array 
 
     (
 
      [id] => 100 
 
      [username] => pradeepta 
 
     ) 
 

 
    [Gallery] => Array 
 
     (
 
      [0] => Array 
 
       (
 
        [id] => 1 
 
        [user_id] => 100 
 
        [photo] => 1111.jpg 
 
       ) 
 
      [1] => Array 
 
       (
 
        [id] => 2 
 
        [user_id] => 100 
 
        [photo] => 222.jpg 
 
       ) 
 
     )    
 
)

我想要的結果應該是這樣的

Array 
 
    (
 
     [User] => Array 
 
      (
 
       [id] => 100 
 
       [username] => pradeepta 
 
      ) 
 

 
     [Gallery] => Array 
 
      (
 
               
 
       [id] => 2 
 
       [user_id] => 100 
 
       [photo] => 222.jpg 
 
      ) 
 
         
 
    )

回答

0

用戶該協會在您的用戶模型

public $hasOne = array(  
 
     'Gallery' => array(
 
      'className' => 'Gallery', 
 
      'foreignKey' => 'user_id', 
 
      'order' => array('Gallery.id' => 'DESC') 
 
     ), 
 
    );

1

該關係仍然需要hasMany,但您想要更改查詢條件。如果使用加入語句,則可以限制返回的結果: -

$this->User->find(
    'first', 
    array(
     'fields' => array(
      'User.*', 
      'Gallery.*' 
     ), 
     // Join on the galleries table 
     'joins' => array(
      array(
       'table' => 'galleries', 
       'alias' => 'Gallery', 
       'type' => 'LEFT', 
       'conditions' => array(
        'Gallery.user_id = User.id' 
       ) 
      ) 
     ), 
     // Order by newest galleries first 
     'order' => array(
      'Gallery.id' => 'DESC' 
     ), 
     // Make sure we only return one instance of each user 
     'group' => array(
      'User.id' 
     ) 
    ) 
);