Laravel 模型批量更新 - Builder::cleanBindings() 必须是数组类型,给定为空
Laravel Model Bulk Update - Builder::cleanBindings() must be of the type array, null given
我正在尝试通过来自我的 Vue 组件的 Ajax 请求批量更新 Laravel 中模型的日期。我的代码如下,但我不确定错误在哪里,我也使用 Postman 对此进行了测试,我将提供结果。
Vue 组件脚本标签
export default {
props: ['data'],
data() {
return {
last: null
}
},
methods:{
...
update(){
console.log(this.data);
console.log(this.last);
axios.put('/api/maintain/bulk',
{
params: {
'ids': this.data,
'date': this.last.toString()
}
}).then((response) => {
console.log(response);
}, (xhr) => {
console.log(xhr);
});
}
},
...
}
data
是从父组件传递的,当记录时 returns [328, 346, __ob__: Observer]
last
由日期类型的输入设置
routes/api.php
...
Route::put('/maintain/bulk', 'MaintenanceController@bulkupdate');
...
MaintenanceController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Maintain;
class MaintenanceController extends Controller
{
...
public function bulkupdate(Request $request){
Maintain::whereIn('id', $request->input('ids'))->update(['start' => $request->input('date')]);
}
}
邮递员API呼叫
PUT | http://127.0.0.1:8000/api/maintain/bulk`
body:
{
"ids": [328, 346],
"date": 2020-10-29
}
响应 - 错误也显示在 Laravel 日志文件中
TypeError: Argument 1 passed to Illuminate\Database\Query\Builder::cleanBindings() must be of the type array, null given, called in C:\Users\adam\LaravelProjects\EMG-AIM-Dev\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php on line 918 in file C:\Users\adam\LaravelProjects\EMG-AIM-Dev\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php on line 2954
-编辑-
我已经意识到请求有什么问题,但我仍然不确定如何解决它,我已经修改了 Postman 调用以显示当前问题,我认为这是由于以下事实从 DOM 输入传递日期似乎没有将其注册为字符串。
当日期作为字符串添加到请求中时 PUT 成功 ("2020-10-29"
) 但目前日期没有作为字符串传递,尽管当我通过以下方式发送参数时Ajax 请求我使用 toString()
方法。
发现将代码更改为以下内容解决了问题
Vue 组件
axios.put('/api/maintain/bulk', {
'ids': this.data,
'date': this.last
})...
维护控制器
public function bulkupdate(Request $request){
Maintain::whereIn('id', $request->ids)->update(['start' => $request->date]);
}
我正在尝试通过来自我的 Vue 组件的 Ajax 请求批量更新 Laravel 中模型的日期。我的代码如下,但我不确定错误在哪里,我也使用 Postman 对此进行了测试,我将提供结果。
Vue 组件脚本标签
export default {
props: ['data'],
data() {
return {
last: null
}
},
methods:{
...
update(){
console.log(this.data);
console.log(this.last);
axios.put('/api/maintain/bulk',
{
params: {
'ids': this.data,
'date': this.last.toString()
}
}).then((response) => {
console.log(response);
}, (xhr) => {
console.log(xhr);
});
}
},
...
}
data
是从父组件传递的,当记录时 returns [328, 346, __ob__: Observer]
last
由日期类型的输入设置
routes/api.php
...
Route::put('/maintain/bulk', 'MaintenanceController@bulkupdate');
...
MaintenanceController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Maintain;
class MaintenanceController extends Controller
{
...
public function bulkupdate(Request $request){
Maintain::whereIn('id', $request->input('ids'))->update(['start' => $request->input('date')]);
}
}
邮递员API呼叫
PUT | http://127.0.0.1:8000/api/maintain/bulk`
body:
{
"ids": [328, 346],
"date": 2020-10-29
}
响应 - 错误也显示在 Laravel 日志文件中
TypeError: Argument 1 passed to Illuminate\Database\Query\Builder::cleanBindings() must be of the type array, null given, called in C:\Users\adam\LaravelProjects\EMG-AIM-Dev\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php on line 918 in file C:\Users\adam\LaravelProjects\EMG-AIM-Dev\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php on line 2954
-编辑-
我已经意识到请求有什么问题,但我仍然不确定如何解决它,我已经修改了 Postman 调用以显示当前问题,我认为这是由于以下事实从 DOM 输入传递日期似乎没有将其注册为字符串。
当日期作为字符串添加到请求中时 PUT 成功 ("2020-10-29"
) 但目前日期没有作为字符串传递,尽管当我通过以下方式发送参数时Ajax 请求我使用 toString()
方法。
发现将代码更改为以下内容解决了问题
Vue 组件
axios.put('/api/maintain/bulk', {
'ids': this.data,
'date': this.last
})...
维护控制器
public function bulkupdate(Request $request){
Maintain::whereIn('id', $request->ids)->update(['start' => $request->date]);
}