2011-04-08 64 views
0

我想創建從一個模型到我的用戶模型的動態綁定,以便每次在該模型上執行查找時都不會調用JOIN。我正在使用該綁定執行HABTM保存。但是,當我使用bindModel函數時,HABTM數據不會保存在數據庫中。CakePHP bindModel HABTM保存

是什麼讓這個奇怪的是,如果我移動我的綁定到用戶模型,然後保存完美的作品。我沒有在文檔中看到任何跡象表明,當模型與bindModel函數關聯時,保存行爲會有所不同(儘管如果有的話,我可能會錯過)。

這裏是我的控制器我bindModel代碼:

$this->User->bindModel(
     array(
      'hasAndBelongsToMany' => array(
       'Othermodel' => array(
        'className'    => 'Othermodel', 
        'joinTable'    => 'othermodels_users', 
        'foreignKey'    => 'user_id', 
        'associationForeignKey' => 'othermodel_id', 
        'unique'     => true, 
        ) 
       ) 
      ) 
     ); 

if($res = $this->User->save($data)){ 
    return true; 
} 

這是我的用戶模型。

class User extends AppModel { 
    public $name = 'User'; 
    public $belongsTo = array(); 
    public $hasOne = array(); 
    public $hasMany = array(); 

    public $hasAndBelongsToMany = array(
    'Othermodel' => array(
     'className'    => 'Othermodel', 
     'joinTable'    => 'othermodels_users', 
     'foreignKey'    => 'user_id', 
     'associationForeignKey' => 'othermodel_id', 
     'unique'     => true 
    ) 
    ); 

同樣,我只有在同一時間的關係,積極在一個地方,所以我知道這個問題是不是與自身結合。這似乎只是與我試圖使用bindModel的事實有關。這是預期的行爲嗎?

回答

0

我不確定這是否相關,但是您確定在綁定和保存之間沒有執行任何其他查找操作。 bindModel僅綁定下一個查找操作的模型,因此您可能需要通過truebindModel來告訴它保持綁定。

相關鏈接:CakePHP: Bind Model not workinghttp://groups.google.com/group/cake-php/browse_thread/thread/316c9796603eac57?pli=1

我希望這會有所幫助。

+0

感謝您的建議,但沒有奏效。我相信保存是我在模型綁定之後嘗試的唯一操作。我的代碼與上面顯示的完全一樣。我已經嘗試了一些其他測試,以確保Cake正在創建此關聯,而不是通過調試功能創建一個動態關聯,並且再次,所有看起來不錯,但保存不會發生。只要我在控制器中註釋掉綁定並移動到模型中,它就可以很好地工作。奇怪的。 – 2011-04-09 15:52:03

0

試試這個,

$this->Message->bindModel(
      array(
       'belongsTo'=>array(
       'User'=>array(
        'foreignKey'=>false, 
        'conditions'=>array('Npl.to=User.id '), 
        'fields'=>array('recive') 
       ), 
       'User_e'=>array(
        'className'=>'User', 
        'foreignKey'=>false, 
        'alias'=>'User_e', 
        'conditions'=>array('Npl.from=User_e.id '), 
        'fields'=>array('recive') 
       ) 
      ) 

      ) 
     );