我在我的Laravel应用程序中有3个模型,如员工,工资和头衔。具有薪资和职称模型的员工模型一对多关系。现在,我需要使用PSEController updateEmployee函数PSEController更新数据
public function updateEmployee(Request $request, $id) {
$employee = Employee::find($id);
$title = $employee->titles()->update($request->all);
$salary = $employee->salaries()->update($request->all);
if(is_null($employee)) {
return response()->json(['message' => 'Employee not found'], 404);
}
$employee->update($request->all());
return response($employee, 200);
}
我的API路由是
Route::put('updateEmployee/{id}','App\Http\Controllers\EmployeeController@updateEmployee');
员工模型
public function titles(): HasMany
{
return $this->hasMany(Title::class, 'emp_no');
}
public function salaries(): HasMany
{
return $this->hasMany(Salary::class, 'emp_no');
}
薪酬模式
public function employee(): BelongsTo
{
return $this->belongsTo(Employee::class, 'emp_no');
}
标题模型
public function employee(): BelongsTo
{
return $this->belongsTo(Employee::class, 'emp_no');
}
但当我尝试更新我得到以下错误消息TypeError: Illuminate\Database\Eloquent\Builder::update(): Argument #1 ($values) must be of type array, null given, called in F:\2023\code\2023\api\vendor\laravel\framework\src\Illuminate\Support\Traits\ForwardsCalls.php on line 23 in file F:\2023\code\2023\api\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php on line 1009
这件事我该怎么办?
4条答案
按热度按时间cgvd09ve1#
该错误表明您没有向API发送任何数据。(
$request->all()
为空)。这是因为您没有验证请求是否包含任何数据。您可以使用
$request->validate()
方法验证请求。更多相关信息请参见Laravel文档;或者你可以使用Laravel表单请求。
dsekswqp2#
您的数据为空。检查你的路由API。通过数组传入变量。
1bqhqjot3#
解决错误
正如一些人在评论中已经注意到的那样,您应该使用
$request->all()
来获取所有请求参数。但我建议永远不要使用它,并使用表单请求验证来过滤请求。使用
$request->all()
以后的错误您正在更新
Has-Many
关系,但Eloquent不知道需要更新哪个模型。这是针对职称和工资关系的。我们不知道工资和职称的独立模型背后的逻辑,但它可能只是employees表中的另一列。使用这种方法,您不需要担心更新3个独立的模型,只需检查表单请求中的字段。
如果您需要更新特定的薪资或职称,您可以添加此案例的路由及其各自的控制器功能。
另一种选择是像我之前说的那样,将这些属性作为雇员的属性,然后使用已经拥有的路由,并在控制器上进行一些修改。
h7wcgrx34#
首先,你要检查员工是否存在,然后像这样更新工资和头衔: