2011-08-08 78 views
2

嗨我建立我的用戶模型只有一個配置文件圖片,這是一個圖像模型的示例。我希望hasOne的條件只包含Image.id等於用戶表中「圖片」列的圖像。我知道有什麼問題......這是代碼的相關部分。CakePHP hasOne協會條件

var $hasOne = array(
      'ProfileImage' => array(
        'className' => 'Image', 
        'conditions' => array('ProfileImage.id' => 'User.picture'), 
        'dependent' => false, 
        'foreignKey' => 'user_id', 
      ) 
    ); 

我的狀況有什麼問題?我如何指定ProfileImage.id等於用戶模型中的圖片列?謝謝!

回答

4

如果外鍵( picture)在User模型中,那麼您的關聯應該是User belongsTo Image。如果圖像一次只能由一個用戶使用,則反之將是Image hasOne用戶。如果一個圖像可以被多個用戶使用,它將是Image hasMany User。

但是,如果圖像一次只能由一個用戶使用,則更好的數據結構應該是將user_id列添加到images表。然後你有一個User hasOne Image/Image belongsTo用戶關係。

對於您既不需要 conditions,只需要 foreignKey


您澄清這個問題後,你的病情需要的樣子:

'conditions' => array('ProfileImage.id = User.picture') 

否則蛋糕認爲ProfileImage.id應該等於字符串"User.picture"

+0

所以圖像只屬於一個用戶。我已經有圖片屬於用戶,而用戶有很多圖片。我爲圖片是個人資料圖片(由User.picture列中的id引用)的特殊情況添加了不同的標題關係。圖像表已經有一個user_id列。 – pll

+0

@pll我明白了。查看更新的答案。 – deceze

+0

好吧,現在我在SQL中看到它不再試圖將它等同於字符串「User.picture」,就像你正確地指出的那樣。但是現在查詢根本沒有執行LEFT連接,所以它不能識別該字段User.picture – pll