CakePHP updateAll()不起作用
Posted
技术标签:
【中文标题】CakePHP updateAll()不起作用【英文标题】:CakePHP updateAll() not working 【发布时间】:2015-08-27 20:35:40 【问题描述】:我使用的是 updateAll() 而不是教程建议的
$this->Post->id = $id;
我的表中没有 id 列。当我运行这段代码时 -
public function edit($user_id = null)
if (!$user_id)
throw new NotFoundException(__('Invalid post'));
$user_info = array('conditions' => array('User.user_ID' => $user_id));
$user = $this->User->find('all', $user_info);
if (!$user)
throw new NotFoundException(__('Invalid User ID'));
if ($this->request->is('put'))
$data = $this->request->input('json_decode');
//$this->set('new_user', $data);
$this->User->updateAll(
array( 'User.status' => 'ooactive' ), //fields to update
array( 'User.user_id' => $user_id ));
我收到此错误 -
错误:SQLSTATE[42S22]:找不到列:1054 '字段列表'中的未知列 'ooactive' SQL 查询:UPDATE
Smooch
.users
ASUser
SETUser
.status
= ooactive WHEREUser
.user_id
= 3
我不知道为什么会出现这个错误,任何帮助都会很棒,谢谢
编辑:
当前代码,我决定按照 Cakephp.org 上的博客教程中显示的方式进行 -
public function edit($user_id = null)
if (!$user_id)
throw new NotFoundException(__('Invalid post'));
$user_info = array('conditions' => array('User.user_ID' => $user_id));
$user = $this->User->find('all', $user_info);
if (!$user)
throw new NotFoundException(__('Invalid User ID'));
if ($this->request->is('put'))
$this->User->user_id = "user_id";
$data = $this->request->input('json_decode');
if($this->User->save($data));
错误 -
错误:SQLSTATE[23000]:违反完整性约束:1062 键 'PRIMARY' 的重复条目 '0' SQL 查询:INSERT INTO
Smooch
.users
(status
) VALUES ('inaaaaaaaactive')
这把它变成了一个 INSERT 语句,不知道为什么。
【问题讨论】:
【参考方案1】:嗯,没关系。文档说:(http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-updateall-array-fields-mixed-conditions)
$fields 数组接受 SQL 表达式。文字值应该使用 DboSource::value() 手动引用。例如,如果您的模型方法之一正在调用 updateAll(),您将执行以下操作:
$db = $this->getDataSource();
$value = $db->value($value, 'string');
$this->updateAll(
array('Baker.approved' => true),
array('Baker.created <=' => $value)
);
所以,使用$db->value('ooactive', 'string')
来转义状态。
【讨论】:
我尝试了上述方法,但它导致了更多问题,所以我尝试回到官方 cakePHP 教程所说的方式 - $this->Post->id = $id;这就是我认为使它成为更新声明的神奇之处。如果我的主键是 user_id,我将如何设置此代码($this->Post->id = $id;)?我将更新我的帖子以反映当前代码。 您可以通过 $this->Post->primaryKey = 'field'; 将主键设置为其他字段我不知道这是否适合你。【参考方案2】:如文档所述,updateAll() 不能像 2.x 中的 save() 一样使用。 您需要在逻辑上手动引用您的输入(并且错误消息指出您需要使用):
$this->User->updateAll(
array( 'User.status' => '"ooactive"'),
array( 'User.user_id' => $user_id )
);
【讨论】:
【参考方案3】:$this->Bookcopy->updateAll(['Bookcopy.status' => 'AVAILABLE'],['Bookcopy.status'=>'REQUESTED'])
错误: SQLSTATE[42S22]:未找到列:1054 '字段列表'中的未知列 'AVAILABLE'
SQL 查询: UPDATE practice_bookchum
.bookcopies
AS Bookcopy
LEFT JOIN practice_bookchum
.books_stores
AS Book_Store
ON (Bookcopy
.book_store_id
= @98765432 @.id
) 设置Bookcopy
.status
= 可用在Bookcopy
.status
= '请求'
Model::updateAll(数组 $fields, 混合 $conditions)
当我将 $fields 作为关联数组与值传递时发生错误
我做到了....
$db = $this->Bookcopy->getDataSource();
$value = 'AVAILABLE';
$value = $db->value($value, 'String');
$this->Bookcopy->updateAll(['status' => $value],['Bookcopy.status'=>'REQUESTED'])
data: "Borrow", status: "success"
data:"Borrow"
status:"success"
【讨论】:
以上是关于CakePHP updateAll()不起作用的主要内容,如果未能解决你的问题,请参考以下文章