Laravel 如何获得其他用户为某个用户提交的推荐信
我在获取其他用户提交的所有证明文件以将其显示在相关用户(正在审核的用户)的用户配置文件上时遇到问题 有两张桌子。首先是Laravel 如何获得其他用户为某个用户提交的推荐信,laravel,laravel-5,laravel-5.5,relationships,Laravel,Laravel 5,Laravel 5.5,Relationships,我在获取其他用户提交的所有证明文件以将其显示在相关用户(正在审核的用户)的用户配置文件上时遇到问题 有两张桌子。首先是用户表,其中包含id,姓名,电子邮件,照片,电话和标题。我有一个avis表,其中存储了带有id、profile\u id、user\u id和注释的推荐信。(user\u id获取提交表单的user的id,profile\u id获取接收证明的用户的id) 我试着像下面这样做,但不知道这是否是正确的方法。我不确定我的关系是否正确。我对拉雷维尔有点陌生。但无论如何,这就是我迄今为止
用户
表,其中包含id
,姓名
,电子邮件
,照片
,电话
和标题
。我有一个avis
表,其中存储了带有id
、profile\u id
、user\u id
和注释的推荐信。(user\u id
获取提交表单的user
的id,profile\u id
获取接收证明的用户的id
)
我试着像下面这样做,但不知道这是否是正确的方法。我不确定我的关系是否正确。我对拉雷维尔有点陌生。但无论如何,这就是我迄今为止所尝试的:
这是用户
型号:
public function avis()
{
return $this->hasMany('App\Avis', 'profile_id', 'user_id');
}
protected $fillable = ['comment','profile_id'];
public function user()
{
return $this->belongsTo('App\User');
}
这是我的Avis
型号:
public function avis()
{
return $this->hasMany('App\Avis', 'profile_id', 'user_id');
}
protected $fillable = ['comment','profile_id'];
public function user()
{
return $this->belongsTo('App\User');
}
这是我在控制器中所做的,控制器显示个人资料和推荐列表:
public function Details($id)
{
$detail = User::with(['area.town', 'services'])->find($id);
$avis = User::whereHas('avis', function ($query) use ($id) {
$query->where('profile_id', '=', $id);
})
->limit(3)
->get();
//dd($avis);
return view('Users', compact('avis', 'detail'));
}
这是我用来写推荐信的表格:
<div id="avisForm">
<p class="feedback_message">We are here to make sure you are sastified and your transactions are safe. We do appreciate and will respond quickly to any feedback from you.</p>
{!! Form::open(['route' => 'avis.store']) !!}
<input type="hidden" name="profile_id" value="{{ $detail>id }}">
{!! Form::textarea('comment', null, ['placeholder' => 'Message', 'required' => 'required']) !!}
{!! Form::submit('Envoyez', ['class' => 'formBtn','style' => 'margin-top:10px']) !!}
{!! Form::close() !!}
</div>
public function store(AvisCreateRequest $request)
{
$avis = new Avis;
$id = Auth::user()->id;
$avis->comment = $request->comment;
$avis->profile_id = $request->profile_id;
$avis->user_id = $id;
//dd($avis);
$avis->save();
return back()->with('success_message', 'Votre Avis a ete envoyez avec succes!');
}
有人能告诉我我做错了什么吗
public function avis()
{
return $this->hasMany('App\Avis', 'profile_id', 'id');
}
嘿,伙计,一定是这样,“profile\u id”和“user\u id”都是外键id'是用户表中的本地键,如果调用avis(),它将使用户表的id与avis表的id匹配profile_id如果您想查询两种类型的avis
,您需要在用户
模型上建立两种不同的关系,用户
写的和他收到的
public function receivedAvis()
{
return $this->hasMany('App\Avis', 'profile_id', 'id');
}
public function writtenAvis()
{
return $this->hasMany('App\Avis', 'user_id', 'id');
}
然后,您可以通过以下方式查询收到的证明:
public function Details($id)
{
$user = User::with(['area.town', 'services'])->find($id);
$avis = $user->receivedAvis()
->limit(3)
->get();
return view('Users', compact('avis', 'user'));
}
public function Details($id)
{
$user = User::with(['area.town', 'services'])->find($id);
$user ->load(['receivedAvis' => function ($query) {
$query->limit(3);
}]);
return view('Users', compact('user'));
}
如果需要,还可以在用户上使用关系加载
——这样就不必向视图传递多个变量。它看起来像这样:
public function Details($id)
{
$user = User::with(['area.town', 'services'])->find($id);
$avis = $user->receivedAvis()
->limit(3)
->get();
return view('Users', compact('avis', 'user'));
}
public function Details($id)
{
$user = User::with(['area.town', 'services'])->find($id);
$user ->load(['receivedAvis' => function ($query) {
$query->limit(3);
}]);
return view('Users', compact('user'));
}
然后,您可以通过$user
变量在视图中访问您的推荐:
@if(count($user->receivedAvis) > 0)
<div id="testimonials">
@foreach($user->receivedAvis as $avis)
<!-- place the code to display your testimonials here -->
@endforeach
</div>
@endif
@if(计数($user->receivedAvis)>0)
@foreach($user->receivedAvis as$avis)
@endforeach
@恩迪夫
请注意,我已将您的$detail
变量重命名为$user
,因为最好使用反映变量类型的变量名。嘿,伙计,它正在工作。非常感谢。我还有一个问题。如何防止用户向同一用户配置文件发送两份推荐信,以及如何防止用户向自己发送推荐信..在返回推荐信表单视图的控制器操作中,如果(\Auth::user()->writenavis()->where('profile_id',$profileId)->count(),可以执行如下检查>0 | |$profileId==\Auth::user()->id){return response()->back();//或者做任何你想做的事}
。所以我应该在Avis控制器中添加这段代码,在那里我存储表单数据。它应该说return redirect()->back()
。对不起,我犯了一个小错误。这是你从其他框架或编程语言学习Laravel时必须学习的最重要的一课:当你自己觉得某件事情很难实现或很乏味时,那么你很可能是做错了。因为Laravel方法通常很短,同时也很有说服力(因此ORM系统的名称为eloquent)