【发布时间】:2019-12-02 08:29:49
【问题描述】:
我是 Lumen 的新手,我正在尝试使用 eloquent 模型在单个查询中更新多行。 我目前收到此错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'field list' (SQL: update `articles` set `0` = {"title":"my blogMASSUPDATE","description":"myblogdescriptionMASSUPDATE","status":3}, `1` = {"title":"my blogMASSUPDATE","description":"myblogdescriptionMASSUPDATE","status":3}, `2` = {"title":"my blog33MASSUPDATE","description":"myblogdescription33MASSUPDATE","status":3}, `articles`.`updated_at` = 2019-12-02 08:23:28 where `status` = ==)
JSON 负载如下所示:
{
"array1": [{
"title": "my blogMASSUPDATE",
"description": "myblogdescriptionMASSUPDATE",
"status": 3
}, {
"title": "my blogMASSUPDATE",
"description": "myblogdescriptionMASSUPDATE",
"status": 3
}, {
"title": "my blog33MASSUPDATE",
"description": "myblogdescription33MASSUPDATE",
"status": 3
}]
}
我的控制器内的代码如下所示:
public function massUpdate($id, Request $request){
$this->validate($request, [
'array1' => 'present|array',
'array1.*.title' => 'required',
'array1.*.description' => 'required'
]);
$data = $request->getContent();
$data = json_decode($data, true);
Article::where('status', $id)->update($data['array1']);
}
这是路由器代码:
$router->put('articles/massUpdate/{id}', 'ArticleController@massUpdate');
这是在我的 RESTClient 中用于 http 请求的 URL(参见 restclient.net):
http://localhost:8080/api/articles/massUpdate/3
不明白是什么问题,引用的列存在,也有匹配指定值的字段。
编辑: 我试过这个解决方案: Laravel 4: how to update multiple fields in an Eloquent model?
建议的代码:
$user = User::where ("username","rok"); // note that this shortcut is available if the comparison is =
$new_user_data = array(...);
$user->fill($new_user_data);
$user->save();
现在,当我重构代码以在上下文中使用上面显示的语法时:
$rows = Article::where('status', $id);
$rows->fill($data);
我得到错误:
Call to undefined method Illuminate\Database\Eloquent\Builder::fill()
在上面引用的 SO 答案的 cmets 中也已经指出了这一点。 谁能启发我如何处理这个问题,因为这段代码看起来就像我想要的那样:动态地批量更新引用的字段。
【问题讨论】:
标签: php laravel eloquent lumen