嘿,我正在使用 laravel 9,我的应用程序中的两个模型之间存在关系:用户和个人资料。 User 模型与配置文件模型具有 hasOne 关系。当我尝试从配置文件控制器运行更新方法时,出现错误:间接修改重载属性 AppUser::$profile 无效。 这是我的更新方法:
public function update(Request $request){
$this->validate($request,[
'name'=>'required',
'province'=>'required',
'bio'=>'required',
]);
$user=Auth::user();
$user->name= $request->name;
$user->profile->province= $request->province;
$user->profile->gender= $request->gender;
$user->profile->bio= $request->bio;
$user->profile->faceb ook= $request->fac ebook;
$user->save();
$user->profile->save();
if($request ->has('password'))
{
$user->password= bcrypt($request->password);
$user->save();
}
return Redirect()->back();
}
这是用户模型
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
/**
* Get the user associated with the User
*
* @return IlluminateDatabaseEloquentRelationsHasOne
*/
public function profile(): HasOne
{
return $this->hasOne(profile::class);
}
}
这是个人资料模型
class profile extends Model
{
use HasFactory;
protected $table ='profile_users';
protected $primarykey='user_id';
protected $fillable = ['province','user_id','bio','fa cebook' ];
/**
* Get the user that owns the profile
*
* @return IlluminateDatabaseEloquentRelationsBelongsTo
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class, 'user_id' );
}
}
class profile extends Model
{
use HasFactory;
protected $table ='profile_users';
protected $primarykey='user_id';
protected $fillable = ['province','user_id','bio','fa cebook' ];
/**
* Get the user that owns the profile
*
* @return IlluminateDatabaseEloquentRelationsBelongsTo
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class, 'user_id' );
}
}
新代码:
public function update(Request $request){
$this->validate($request,[
'name'=>'required',
'province'=>'required',
'bio'=>'required',
]);
$user=Auth::user();
$profile = $user->profile()->firstOrNew();
$profile->whatever = 'whatever';
$user->name= $request->name;
$user->profile->province= $request->province;
$user->profile->gender= $request->gender;
$user->profile->bio= $request->bio;
$user->profile->facebo ok= $request->fa cebook;
$user->save();
$profile->save();
if($request ->has('password'))
{
$user->password= bcrypt($request->password);
$user->save();
}
return Redirect()->back();
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
从注释中转储代码:
我很明显并不是说实际使用
->whatever;这只是一个例子;使用正确的属性,您的代码应该可以工作。