2012-01-14 8 views
1

私はこれをたくさん見つけましたが、何も私が探しているものに似ているようです..cakephp hasManyを使って一度に複数のレコードをリンクするには?

私はしようとしている複数のHTMLリスト。

の表は以下のとおりです。 ユーザー(ID、名前、ユーザ名) カード(ID、USER_ID)

モデル:

class User extends AppModel { 
    public $name = 'User'; 
    public $hasMany = array('Card');} 

class Card extends AppModel {  
    public $name = 'Card'; 
    public $belongsTo = array('User');} 

ユーザーedit.ctpビュー

echo $this->Form->input('id'); 
echo $this->Form->input('Card', array('multiple'=>true)); 

どのようにコントローラのように見えるだろうか?現在、それはこのように見えますが、

if (!empty($this->data)) { 
    foreach($this->data['User']['Card'] as $key => $item){ 
     $this->data['User']['Card'][$key] = array('id'=>$item, 'user_id'=>$this->data['User']['id']); 
         } 
     if ($this->User->saveAll($this->data)) { 
      //$this->User->Card->saveAll($this->data); 
      $this->Session->setFlash(__('The user has been saved', true)); 
      $this->redirect(array('action' => 'index')); 
     } else { 
      $this->Session->setFlash(__('The user could not be saved. Please, try again.', true)); 
    } 
} 
if (empty($this->data)) { 
    $this->data = $this->User->read(null, $id); 
    $this->set('cards', $this->User->Card->find('list')); 
} 

ます$ this->はデータが含まれている「関連カードなしで」Userレコードだけを保存しない:

Array 
(
    [User] => Array 
    (
     [id] => 1 
     [name] => Superman 
     [status] => 1 
     [Card] => Array 
     (
      [0] => Array 
      (
       [id] => 11402130001 
       [user_id] => 1 
      ) 
      [1] => Array 
      (
       [id] => 11402130002 
       [user_id] => 1 
      ) 
      [2] => Array 
      (
       [id] => 11402130003 
       [user_id] => 1 
      ) 
      [3] => Array 
      (
       [id] => 11402130004 
       [user_id] => 1 
      ) 
     ) 
    ) 
) 

答えて

0

はあなたがそうあなたのカードのためのuser_idエントリを追加する必要がありますあなたのデータは次のようなもののようになりますこと:

Array 
(
    [User] => Array 
     (
      [id] => 10 
     ) 
    [Card] => Array 
     (
      [0] => Array 
       (
       [id] => 1 
       [user_id] => 10 
       ) 
      [1] => Array 
       (
       [id] => 2 
       [user_id] => 10 
       ) 

     ) 
) 

私はの$ this - >データ[ 'カード]配列にforeachループのために行くだろう

foreach ($this->data['Card'] as &$card) { 
    $card['user_id'] = $this->data['User']['id']; 
} 

saveAllを実行できます。 Btw、$ this-> User-> Card-> saveAll($ this-> data)を削除してください。

+0

ありがとうございましたG.Jが動作しません!私はこれを前に試しましたが、問題が何であるかをuser_idに保存していませんか?私は1.3.4 – mmahgoub

+0

@ mmahgoubを使用しています。あなたがUser配列の外側にCard配列を置くとどうなりますか?とにかくうまくいくとは思えません。そうでない場合は、ユーザーの代わりにカードを保存しようとすることで、自分のやり方を変えようとするべきでしょう。それが動作するかどうか教えてください。 –

+0

こんにちはGJは実際にこのように動作します: 'if($ this-> user-> saveAll($ this-> data ['User'])){ $ this-> Session-> setFlash(__( 'ユーザーは保存されました '、true));}'しかし、別の問題が発生しました。 CakePHPは選択されていないアイテムを認識しません。言い換えれば、カードを選択するとカードにリンクすることができますが、選択を解除するとリンクが解除されます。任意のアイデアどのようにforeachループとsaveFieldとこの種のものなしでこれを達成するために? – mmahgoub

関連する問題