当我运行以下API时,我收到此错误
“间接修改重载属性App \ User :: $ attendance无效”。
我仍然无法弄清楚这么久。你能不能请别人帮助我。
public function apiPresent( $id, Request $request )
{
$tokenuser = User::with('attendance')
->where('token', $request->input('token'))->first();
$present = $request->input('present');
$user = User::with('attendance')->find($id);
if( $user && $tokenuser == $user )
{
$user->attendance->present = $present;
$user->attendance->date = Carbon::now()->format('d-m-Y');
$user->attendance->time = Carbon::now()->format('H-i');
$user->attendance->save();
return response()->json([
'status' => 'Ok',
'message' => 'Present Changed',
'Present' => $user->attendance->present
]);
}
else
{
return response()->json([
'status' => 'Fail',
'message' => 'Your state does not changed'
]);
}
}
如果我理解你的问题。你节省了出勤率。
试试这个:
use App\Attendance; // Add before controller declaration
public function apiPresent( $id, Request $request )
{
$tokenuser = User::where('token', $request->input('token'))->first();
$present = $request->input('present');
$user = User::find($id);
if( $user && $tokenuser->id == $user->id ){
$attendance = new Attendance;
$attendance->present = $present;
$attendance->date = Carbon::now()->format('d-m-Y');
$attendance->time = Carbon::now()->format('H-i');
$attendance->save();
return response()->json([
'status' => 'Ok',
'message' => 'Present Changed',
'Present' => $present
]);
}
else {
return response()->json([
'status' => 'Fail',
'message' => 'Your state does not changed'
]);
}
}
希望能帮助到你!
我认为问题是你试图直接分配给App::User
的关系。您的代码段强调了这一点:
if( $user && $tokenuser->id == $user->id ){
$user->attendance->present = $present;
$user->attendance->date = Carbon::now()->format('d-m-Y');
$user->attendance->time = Carbon::now()->format('H-i');
$user->attendance->save();
...
在Eloquent中,您使用魔法__get()方法访问关系作为属性,该方法返回对象的副本。
当您尝试将任何值分配给任何关系的属性(在本例中为$ user-> attendance)时,它根本不会对原始对象产生任何影响,因此会出现警告。
您可以通过创建新的对象实例并将其添加到create
方法来解决此问题,如下所示:
$attendance = new Attendance();
$attendance->present = $present;
$attendance->date = Carbon::now()->format('d-m-Y');
$attendance->time = Carbon::now()->format('H-i');
$user->attendance->create($attendance);
这将使用外键保存新记录。