【问题标题】:Why does lumen have issues identifying the columns?为什么 lumen 无法识别列?
【发布时间】: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


    【解决方案1】:

    先看看这个Laravel-update

    接下来如果你想批量更新试试这个

    ->update('column_name'=>$data['array1']);
    

    编辑: Builder 没有类似 fill 的方法,如果你写了这个 ->

     $data=
            [
                'title' => 'my blogMASSUPDATE',
                'description' => 'myblogdescriptionMASSUPDATE',
                'status' => 3,
            ];
    
        $id=1;
        $rows = new Test();
        $rows->fill($data)->save();
    

    您应该在数据库中看到类似的内容 ->

    填写不更新记录而是创建一个新记录

    更新:好的,我发现类似的东西试试这个 ->

             $data=[
            [
                'title' => 'my blogMASSUPDATE',
                'description' => 'myblogdescriptionMASSUPDATE',
                'status' => 3,
            ],
            [
                'title' => 'my blog3MASSUPDATE',
                'description' => 'myblogdescriptionMASSUPDATE',
                'status' => 3,
            ],
            [
                'title' => 'my blog33MASSUPDATE',
                'description' => 'myblogdescription33MASSUPDATE',
                'status' => 3,
            ]
            ];
            $id=3;
        collect($data)->each(function ($item) use($id){
            Test::where('status', $id)->update($item);
        });
    

    【讨论】:

    • @baryon123 检查更新
    【解决方案2】:

    请检查,我认为必须有效:

    $data = '{
        "array1": [{
            "title": "my blogMASSUPDATE",
            "description": "myblogdescriptionMASSUPDATE",
            "status": 3
        }, {
            "title": "my blogMASSUPDATE",
            "description": "myblogdescriptionMASSUPDATE",
            "status": 3
        }, {
            "title": "my blog33MASSUPDATE",
            "description": "myblogdescription33MASSUPDATE",
            "status": 3
        }]
    }';
    
    
    $data = json_decode($data, true);
    
    foreach ( $data['array1'] as $item ) {
        Article::where('status', $id)->update($item);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 2021-04-27
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多