如何正确地将数据保存到数据库中?

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”)

如何编写一个函数来处理重复条目而不返回错误?

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);

谢谢您的回复。为了使用“create”,我认为我应该像这样做:因为在检查模型之前,我甚至不知道ID是否存在于数据库中。$isIdExists = $this->ModelName->find('first', array( 'conditions' => array('ModelName.id' => $id) --- if ($isIdExists) { $this->ModelName->create(); } - trante
3
你可能忘记将ID列设置为auto_increment了吗? - Julian Hollmann
嗯,我使用这个模型来存储会员数据。因此,ID列是用户的Twitter ID。每个用户都有唯一的Twitter ID,并且它不从零开始。因此,如果记录不存在,我将使用ID参数创建新记录。 - trante
现在我正在处理这个问题:$this->ModelName->twitter_user_id = $twitter_user_id;``$isIdExists = $this->ModelName->exists(); 在这种情况下,$isIdExists 返回 false。但是从 phpmyadmin 中我可以看到记录是存在的。 - trante
1
这里的主要问题是,cakephp期望主键被称为“id”,如果不是这种情况,您需要在模型中指定。 因此,如果您的主键字段名叫做“twitter_user_id”,您需要在模型中设置public $primaryKey ='twitter_user_id'; - Julian Hollmann
显示剩余5条评论

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);
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接