0

あるテーブルから別のテーブルにデータの行をコピーしたい。コピーしたいテーブルには、ID、名前、パスワードのフィールドがあります。値をコピーする必要があるテーブルには、id、name、password、post_countフィールドがあります。

次のコードを使用しようとしていますが、役に立ちません。

$data=$this->Register->find(null, $id);
if($this->User->save($data)) {
    $this->Session->setFlash(__('Data copied'), true);
}

私は何をすべきか??

値のコピー先のテーブルの検証はすでに削除されています。

前もって感謝します

4

3 に答える 3

1

クエリ$this->Register->find(null, $id);は、いくつかの異なる形式でデータを返します。代わりに、クエリを変更しました。コードは以下です

$condition = array('id'=>$id);
$data=$this->Register->find('first', array('conditions'=>$condition));
$newdata = array(
            'User' => array(
                'name' => $data['Register']['name'],
                'password' => $data['Register']['password']
       )
);
if($this->User->save($newdata)) {
      $this->Session->setFlash(__('Data copied'), true);
}

これは、 find('first') の戻り値が必要に応じて変更できる配列を返し、その後 User モデルの save メソッドを呼び出すことができるため機能します。

于 2012-04-19T05:12:34.060 に答える
0

これが機能しない理由は、その ID による登録レコードが存在しないためだと思います。結果を保存する前に、結果にデータが含まれているかどうかを確認する必要があります。これが、INSERT ステートメントで NULL,NULL を取得する理由です。

$record = $this->Register->findById($id);
if(!empty($record))
{
   $this->User->create();
   if($this->User->save(array('User'=>$record['Register']),false,array('name','password')))
   {
      $this->Session->setFlash(__('Data copied'), true);
   }
}
else
{
   $this->Session->setFlash(__('Data not found'), true);
}
于 2012-04-20T01:56:45.713 に答える
0
$data = array();
$data = $this->Register->read(null, $id);

$newdata = array();
$newdata = array(
          'User' => array(
                      'name' => $data['Register']['name'],
                      'password' => $data['Register']['password']
                   )
        );
// If you are in Register controller then import User model 

if($this->User->save($newdata, false)) {
    $this->Session->setFlash(__('Data copied'), true);
}
于 2012-04-18T09:07:37.397 に答える