Laravel 5 关系不正常?
Laravel 5 Relationship Not Working?
在我的应用程序中,我有几个模型:用户和配置文件。用户模型仅适用于公司,我的应用程序仅适用于公司。用户注册时,只需填写姓名、电子邮件地址和密码。我的个人资料模型包含公司名称、地址等列。我的个人资料表格不起作用;不保存到数据库。这是设置:
表单控制器:
public function update($company_name)
{
$user = User::whereCompanyName($company_name)->firstOrFail();
$user->fill(Input::all());
$user->save();
flash('You have successfully edited your profile');
return redirect('/');
}
User.php:
public function profile()
{
return $this->hasOne('Profile');
}
Profile.php:
protected $fillable = ['company_name', 'company_logo', 'company_founded'];
public function user()
{
return $this->belongsTo('App\User', 'user_id','ID');
}
表格:
{!! Form::model($user, array('method' => 'PATCH', 'route' => array('profile.update', $user->company_name), 'files' => true)) !!}
{!! Form::hidden('user_id', Auth::user()->id) !!}
// more fields
<div class="form-group">
{!! Form::label('company_name', 'Company Name') !!}
{!! Form::text('company_name', null, ['class' => 'form-control']) !!}
</div>
{!! Form::submit('Update Profile', ['class' => 'btn btn-primary']) !!}
{!! Form::close() !!}
我设置的关系正确吗?没有任何内容保存到数据库中。
您只更新了用户模型和用户模型。您还需要在 profile
关系中设置属性:
$user->update(Input::all());
$user->profile->update(Input::all());
您的控制器操作也可以稍微整理一下,使用 route–model binding 注入您的 User
模型实例,并使用服务容器提供 Request
实例所以你没有使用 Input
外观:
public function update(User $user, Request $request)
{
$user->update($request->all());
$user->profile->update($request->all());
flash('You have successfully updated your profile.');
return redirect('/');
}
我想发表评论但没有足够的声誉:(几天前我发现这种方法有点问题:
$user->update(Input::all());
$user->profile->update(Input::all());
在这种情况下,相关模型(示例中的配置文件)中的 mutators 不会被调用(可能是错误):
public function setLoremIpsumAttribute($attr)
{
# code
}
在 controller 中我尝试了另一种方法并且有效:
$user->update($request->all());
$user->profile->fill($request->all()['profile'])->push();
在Laravel 5中,当你想链接关系时,你需要例如(Post与评论相关)使用你评论中的方法。
Post::find(id)->comment()->where(your where statement)
来自 Laravel 的文档:
如果您需要为检索评论添加更多约束,您可以调用评论方法并继续链接条件:
$comments = Post::find(1)->comments()->where('title', '=', 'foo')->first();
在我的应用程序中,我有几个模型:用户和配置文件。用户模型仅适用于公司,我的应用程序仅适用于公司。用户注册时,只需填写姓名、电子邮件地址和密码。我的个人资料模型包含公司名称、地址等列。我的个人资料表格不起作用;不保存到数据库。这是设置:
表单控制器:
public function update($company_name)
{
$user = User::whereCompanyName($company_name)->firstOrFail();
$user->fill(Input::all());
$user->save();
flash('You have successfully edited your profile');
return redirect('/');
}
User.php:
public function profile()
{
return $this->hasOne('Profile');
}
Profile.php:
protected $fillable = ['company_name', 'company_logo', 'company_founded'];
public function user()
{
return $this->belongsTo('App\User', 'user_id','ID');
}
表格:
{!! Form::model($user, array('method' => 'PATCH', 'route' => array('profile.update', $user->company_name), 'files' => true)) !!}
{!! Form::hidden('user_id', Auth::user()->id) !!}
// more fields
<div class="form-group">
{!! Form::label('company_name', 'Company Name') !!}
{!! Form::text('company_name', null, ['class' => 'form-control']) !!}
</div>
{!! Form::submit('Update Profile', ['class' => 'btn btn-primary']) !!}
{!! Form::close() !!}
我设置的关系正确吗?没有任何内容保存到数据库中。
您只更新了用户模型和用户模型。您还需要在 profile
关系中设置属性:
$user->update(Input::all());
$user->profile->update(Input::all());
您的控制器操作也可以稍微整理一下,使用 route–model binding 注入您的 User
模型实例,并使用服务容器提供 Request
实例所以你没有使用 Input
外观:
public function update(User $user, Request $request)
{
$user->update($request->all());
$user->profile->update($request->all());
flash('You have successfully updated your profile.');
return redirect('/');
}
我想发表评论但没有足够的声誉:(几天前我发现这种方法有点问题:
$user->update(Input::all());
$user->profile->update(Input::all());
在这种情况下,相关模型(示例中的配置文件)中的 mutators 不会被调用(可能是错误):
public function setLoremIpsumAttribute($attr)
{
# code
}
在 controller 中我尝试了另一种方法并且有效:
$user->update($request->all());
$user->profile->fill($request->all()['profile'])->push();
在Laravel 5中,当你想链接关系时,你需要例如(Post与评论相关)使用你评论中的方法。
Post::find(id)->comment()->where(your where statement)
来自 Laravel 的文档:
如果您需要为检索评论添加更多约束,您可以调用评论方法并继续链接条件:
$comments = Post::find(1)->comments()->where('title', '=', 'foo')->first();