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 回答