2010-10-28 40 views
2

基本上我有以下型號:的hasMany CakePHP中減少到hasOne CakePHP中

用戶(ID,用戶名) 照片(ID,USER_ID,路徑)

我已成立以下關係:用戶的hasMany照片。

現在,在一個屏幕上,我想列出用戶,並在每個用戶旁邊顯示隨機照片。我試圖建立以下關係式:

用戶hasOne SamplePhoto(其中SamplePhoto只是照片模式)

但是當用戶有兩張照片,例如,他在名單上列出兩次。

基本上我的問題是:你可以減少與hasOne的很多關係,而不需要在上面提出的表格模式中添加任何字段?我想告訴蛋糕 - 在照片表中找到與女巫確定的user_id匹配的第一條記錄。

回答

0

你會做這樣的事情:

$user = $this->User->find('first', array('conditions' => 
       array('username'=>$this->data['User']['username'], 
         'active'=>true))); 
+0

這將找到的第一個用戶 – Leo 2010-10-28 22:55:49

2

如果你做一個發現像$這個 - >用戶 - >讀(NULL,$ ID),回報率將是一個數組,看起來像:

Array 
(
    [User] => Array 
     (
      [id] => 121 
      [username] => tom 
     ) 

    [Photo] => Array 
     (
      [0] => Array 
       (
        [id] => 123 
        [user_id] => 121 
        [path] => Somewhere 
       ) 
      [1] => Array 
       (
        [id] => 124 
        [user_id] => 121 
        [path] => SomeOtherPlace 
       ) 
     )    
) 

從這個數組,你可以挑不過照片你喜歡的,是它的第一:

$this->data['Photo'][0] 

最後:

$this->data['Photo'][count($this->data['Photo'])] 

明確的記錄:

$this->data['Photo'][3] 

或一些隨機方式:

$this->data['Photo'][$rnd] 
2

不要讓這個複雜得多,它需要的。 :)

$data = $this->User->Photo->find('first', 
     array('conditions' => array('Photo.user_id' => $id))); 

爲您提供了$data['Photo']照片附帶的$data['User']用戶。

3

您也可以使用Containable behaviour,然後設置類似:

$this->User->find(
    'all', 
    array(
     'contains' => array(
      'Photo' => array(
       'order' => 'rand()', 
       'limit' => 1 
      ) 
     ) 
    ) 
); 

那麼你應該得到類似

Array 
(
[User] => Array 
    (
     [id] => 121 
     [username] => tom 
    ) 

[Photo] => Array 
    (
     [0] => Array 
      (
       [id] => 123 
       [user_id] => 121 
       [path] => Somewhere 
      ) 
    )