间接修改重载 属性 Laravel 补丁
Indirect modification of overloaded property Laravel Patch
我收到错误 500(间接修改重载 属性 App\Example::$exampleName 无效)
关于我的更新方法,我不确定为什么。
public function update(Request $request, Example $example)
{
$data = $request->validate([
'account_name' => 'required|string',
'name'=> 'nullable|string',
'name_type' =>'nullable|integer',
]);
$example->account_name = $data['account_name'];
$example->exampleName->name = $data['name'];
$example->exampleName->name_type = $data['name_type'];
$example->push();
return response($example,200);
}
如评论中所述,$example->exampleName
可以是 null
,因此 accessing/modifying 属性或调用方法是不允许的。需要重新考虑这里的逻辑。例如:
$exampleName = $example->exampleName;
if(!$exampleName){
$exampleName = new ExampleName();
$exampleName->example_id = $example->id;
}
$exampleName->name = $data['name'];
$exampleName->name_type = $data['name_type'];
$exampleName->save();
在此示例中,它首先检查关联记录是否存在,如果找到,则忽略初始化。如果没有找到,它会初始化它,然后 link 通过 example_id
发送它(或者执行 link)。然后,它只是填充列并执行 save()
操作。您的完整代码如下所示:
public function update(Request $request, Example $example){
$data = $request->validate([
'account_name' => 'required|string',
'name'=> 'nullable|string',
'name_type' =>'nullable|integer',
]);
$example->account_name = $data['account_name'];
$example->save();
$exampleName = $example->exampleName;
if(!$exampleName){
$exampleName = new ExampleName();
$exampleName->example_id = $example->id; // Or however you link them
}
$exampleName->name = $data['name'];
$exampleName->name_type = $data['name_type'];
$exampleName->save();
$example->load('exampleName');
return response($example,200);
}
由于 $example->exampleName
在 return
语句之前可能仍然是 null
,调用一个简单的 $example->load()
以确保它也在 JSON 中返回响应。
我收到错误 500(间接修改重载 属性 App\Example::$exampleName 无效) 关于我的更新方法,我不确定为什么。
public function update(Request $request, Example $example)
{
$data = $request->validate([
'account_name' => 'required|string',
'name'=> 'nullable|string',
'name_type' =>'nullable|integer',
]);
$example->account_name = $data['account_name'];
$example->exampleName->name = $data['name'];
$example->exampleName->name_type = $data['name_type'];
$example->push();
return response($example,200);
}
如评论中所述,$example->exampleName
可以是 null
,因此 accessing/modifying 属性或调用方法是不允许的。需要重新考虑这里的逻辑。例如:
$exampleName = $example->exampleName;
if(!$exampleName){
$exampleName = new ExampleName();
$exampleName->example_id = $example->id;
}
$exampleName->name = $data['name'];
$exampleName->name_type = $data['name_type'];
$exampleName->save();
在此示例中,它首先检查关联记录是否存在,如果找到,则忽略初始化。如果没有找到,它会初始化它,然后 link 通过 example_id
发送它(或者执行 link)。然后,它只是填充列并执行 save()
操作。您的完整代码如下所示:
public function update(Request $request, Example $example){
$data = $request->validate([
'account_name' => 'required|string',
'name'=> 'nullable|string',
'name_type' =>'nullable|integer',
]);
$example->account_name = $data['account_name'];
$example->save();
$exampleName = $example->exampleName;
if(!$exampleName){
$exampleName = new ExampleName();
$exampleName->example_id = $example->id; // Or however you link them
}
$exampleName->name = $data['name'];
$exampleName->name_type = $data['name_type'];
$exampleName->save();
$example->load('exampleName');
return response($example,200);
}
由于 $example->exampleName
在 return
语句之前可能仍然是 null
,调用一个简单的 $example->load()
以确保它也在 JSON 中返回响应。