laravel使用where更新多行

5vf7fwbs  于 2021-06-24  发布在  Mysql
关注(0)|答案(3)|浏览(314)

我通过ajax在字符串中输入id,
例子:

"1,2"

在我的控制器中,我想使用where with id=> [1,2] .
AJAX :

$('#add_product').click(function() { 
   var id = $('#get_value').val();
    $.ajax({
        type: 'POST',
        url: "{{action('ProductController@updateProduct')}}",
        data: {
        id: id
        },
     success: function(data){
          alert("success");
     }
    });
});

控制器:

public function updateProduct(Request $request){
 $test_value = collect($request->id);
 $updateProduct = Product::whereIn('id',$test_value)
                  ->update(['title' => 'My title']);
}

但我在网络上有个错误:
sqlstate[22007]:无效的datetime格式:1292截断了不正确的双精度值:“1,2”(sql:update“products”set“title”=“my title”,其中(1,2)中的“id”)

bejyjqdl

bejyjqdl1#

不能更新表-bulk中的字段。您需要通过foreach逐个更新

public function updateProduct(Request $request){
 $updateProducts = [];

 foreach((array) $request->id as $id) {
  $updateProducts[] = Product::where('id', $id)
                                      ->first()
                                      ->update(['title' => 'My title']);
 }
}
lnlaulya

lnlaulya2#

在$test\u value中,您将获得值 "1,2" 作为一个字符串,因此必须首先使用explode()函数(explode()函数在这里做的是),

$ids = explode(',',$test_value);

那就把这个传过来 $ids 你的职能。

public function updateProduct(Request $request){
    $test_value = $request->id;
    $ids = explode(',',$test_value);
    $updateProduct = Product::whereIn('id',$ids)
                  ->update(['title' => 'My title']);
}
az31mfrm

az31mfrm3#

您需要删除collect()

public function updateProduct(Request $request){
   $test_value = $request->id;
   $ids = explode( ',',$test_value);
   $updateProduct = Product::whereIn('id',$ids)
              ->update(['title' => 'My title']);
}

相关问题