Laravel使用whereIn

时间:2018-04-10 11:16:22

标签: mysql ajax laravel

我通过ajax在字符串中输入了id,

示例:

"1,2"

在我的控制器中,我想使用带有id =>的 whereIn 在一个查询中更新产品的多行[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]:无效的日期时间格式:1292截断错误的DOUBLE值:'1,2'(SQL:更新“产品”设置“title”=“我的标题”其中“id”在(1, 2))

3 个答案:

答案 0 :(得分:0)

$ test_value 中,您将值"1,2"作为字符串获取,因此您必须首先使用 explode()函数使其成为数组(爆炸的内容) )函数do是here),

$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']);
}

答案 1 :(得分:0)

您需要删除 collect()

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

答案 2 :(得分:-1)

您无法更新表格中的字段 - 批量。您需要通过foreach逐个更新

class ContentPostProc
{

  public function run(array &$parameters) {
        $searchReplace = [
            'http://domain.tld' => 'https://domain.tld'
        ];
        $parameters['pObj']->content = str_replace(array_keys($searchReplace), array_values($searchReplace), $parameters['pObj']->content);
    }
}