3

私は通常、次のように新しいデータをデータベースに保存します。

$this->MyTable->set(array(
 'id' => $id,
 'code' => $temp_code,
 'status' => $status,
 'age' => $age,
 'location' => $location,
 'money' => $money
));

$this->MyTable->save();

ID がデータベースに既に存在する場合は、対応するフィールドを次のように更新します。

$this->Adtweet->id = $id;
$this->Adtweet->saveField('code', $temp_code);
$this->Adtweet->saveField('status', $status);

これを行うためのより良い、または「適切な」方法はありますか?

既に存在する ID を入力しようとしてset関数を使用すると、次の SQL 整合性エラーが発生します。

(エラー: SQLSTATE[23000]: 整合性制約違反: 1062 キー 'PRIMARY' のエントリ '150245925' が重複しています)

エラーを返さずに重複エントリをきれいに処理する関数を作成するにはどうすればよいですか?

4

2 に答える 2

19

新しいデータを保存したい場合は、次を使用してModel::save()ください。

$data = array(
    'ModelName' => array(
        'foo' => $foo
    )
)

// prepare the model for adding a new entry
$this->ModelName->create();

// save the data
$this->ModelName->save($data);

データを更新したい場合は、呼び出さずに同じメソッドを使用してくださいModel::create()

$data = array(
    'ModelName' => array(
        'id' => $id
        'foo' => $foo
    )
)

$this->ModelName->save($data);

参照: http://book.cakephp.org/2.0/en/models/ Saving-your-data.html#model-save-array-data-null-boolean-validate-true-array-fieldlist-array

編集:

これがあなたが探しているものだと思います:

$this->ModelName->id = $id;
if (!$this->ModelName->exists()) {
    $this->ModelName->create();
}

$this->ModelName->save($data);
于 2012-06-20T20:07:44.113 に答える
0

掲載データ例

Array
(
    [ModelName] => Array
        (
            [column1] => value
            [column2] => value
            [column3] => value
        )

)

これを追加してみてください

if ($this->request->is('post')) {
    $this->ModelName->create();
    $this->ModelName->save($this->request->data);
}

これを編集してみてください

if ($this->request->is('post')) {
    $this->ModelName->id = 2;
    $this->ModelName->save($this->request->data);
 }
于 2016-05-23T13:45:34.617 に答える