2011-12-20 13 views
0

saveAllを正しく使用して、複数のリレーショナルモデルのユーザーレコードを更新しようとしています。以下は、私がSAVEALL関数に提出することを使用している配列です:複数のリレーショナルモデルを持つCakephp SaveAll

Array 
(
    [InterestsubsUser] => Array 
     (
      [0] => Array 
       (
        [interestsub_id] => 3 
        [user_id] => 1 
       ) 

      [1] => Array 
       (
        [interestsub_id] => 4 
        [user_id] => 1 
       ) 

      [2] => Array 
       (
        [interestsub_id] => 5 
        [user_id] => 1 
       ) 

     ) 

    [User] => Array 
     (
      [relationship_status_id] => 1 
      [ethnicity_id] => 7 
      [age] => 27 
      [height_id] => 1 
      [weight_id] => 1 
      [image] => testing 
     ) 

    [LookingforsUser] => Array 
     (
      [0] => Array 
       (
        [lookingfor_id] => 2 
        [user_id] => 1 
       ) 

      [1] => Array 
       (
        [lookingfor_id] => 3 
        [user_id] => 1 
       ) 

      [2] => Array 
       (
        [lookingfor_id] => 4 
        [user_id] => 1 
       ) 

      [3] => Array 
       (
        [lookingfor_id] => 5 
        [user_id] => 1 
       ) 

     ) 

    [SocialLinksUser] => Array 
     (
      [0] => Array 
       (
        [social_link_id] => 1 
        [user_id] => 1 
       ) 

      [1] => Array 
       (
        [social_link_id] => 2 
        [user_id] => 1 
       ) 

      [2] => Array 
       (
        [social_link_id] => 3 
        [user_id] => 1 
       ) 

     ) 

) 

SAVEALL機能は、しかし、私はUserテーブルとHABTMの関係でリレーショナルデータベーステーブル内の任意の更新された値/行を見ることができない良いであるtrueを返しています。また、新しい行のユーザーを挿入していますが、ユーザーを更新したいと思います。私は$ this-> User-> id = 1を試しましたが、うまくいきませんでした...

この問題を回避する方法はありますか?あなたはユーザーテーブルからデータを読み取ることができた後、フォームで隠しidフィールドを追加すること$this->read てみてくださいを使用して、そのコードを使用して、その問題ではないと言うことができます

答えて

0

あなたが$this->User->id = 1を使用してユーザテーブルから値を読み取るしようとしましたか。だからに。あなたがデータを再度更新することができない場合は、saveallをもう一度試してみてください。

function _Fill_user_array($user=array(),$user_type=null,$mode=null){ 
     if(! array_key_exists('User',$user)){ return; } 
     //logic for update 
     $this->data['User']['updated_date'] =date('Y-m-d'); 
     $this->data['User']['updated_by'] =$this->Auth->user('id'); 

     if($mode==null){ 
     // logic for new entry 
      $this->data['User']['registered_date'] = date('Y-m-d');   
      $this->data['User']['created_by'] =$this->Auth->user('id');   
      $this->data['User']['user_type'] = $user_type; 
     } 

} 

そして、あなたの更新アクションで

あなたが
`$this->_Fill_user_array($this->data,null,'UPDATE');` This will update you data 

を次の呼び出したり、[InterestsubsUser]にデータを保存した後にのみ、ユーザテーブルに保存するには、以下のメソッドを使用することができます。あなたと私の意見の問題で

$this->User->id = ['ID you wanted to select']; 
$this->User->save($this->data['User']); 

は、ユーザーテーブル生が選択されていないです。

関連する問題