我正在构建我的第一个Laravel应用。这是我无法克服的第一个问题。
我试图用Google搜索有关它的信息,但找不到能帮助我的东西。
class ProfilesController extends Controller
{
public function index(User $user)
{
return view('profiles.index', compact('user'));
}
public function edit(User $user){
return view('profiles.edit', compact('user'));
}
public function update(User $user){
$data = request()->validate([
'description' => 'required',
]);
$user->profile->update($data);
return redirect("{$user->id}/edit");
}
}
我想解决这个问题并更新$data
。
修改
public function profile() {
return $this->hasOne(Profile::class);
}
public function posts(){
return $this->hasMany(Post::class)->orderBy('created_at', 'DESC');
}
答案 0 :(得分:0)
答案 1 :(得分:0)
我认为您不能直接在实例上更新,您必须这样做:User::where('user_id', $user->id);
如果要“更新”实例,则必须执行:$user->description = $data['description'];
$user->save();
答案 2 :(得分:0)
执行以下操作:
if($user->profile) {
$user->profile()->update($data);
}
希望这会对您有所帮助。
答案 3 :(得分:0)
我想这是因为默认情况下用户没有profile
。
解决这个问题的一种方法是在profile
模型中的User
关系中使用withDefault(),例如
public function profile()
{
return $this->hasOne(Profile::class)->withDefault();
}
由于配置文件可能不存在,因此您需要稍微更改控制器代码:
更改:
$user->profile->update($data);
收件人:
$user->profile->fill($data)->save();
答案 4 :(得分:0)
我遇到了同样的问题。事实证明,我在创建新用户时忘记创建一个新的空配置文件。所以我在这种情况下调用了用户个人资料的更新为空。 尝试将其添加到 User 模型,然后再迁移:刷新您的数据。
protected static function boot()
{
parent::boot();
static::created(function ($user) {
$user->profile()->create();
});
}
这将自动为用户创建一个新的个人资料。