如何解决如何在laravel中的关系中设置查询?
我有这张桌子
用户合同
用户
邀请
邀请包含参加合同的邀请,并通过电子邮件发送。我想使用电子邮件作为ID,以获取受邀参加用户的所有合同。 而且,我需要将其作为用户模型上的关系进行处理,因此可以使用记录的用户电子邮件作为过滤器。
这是我定义的关系,但使用用户的ID与邀请表上的foreing_key(usercontract)进行匹配。我不太清楚为什么。
public function nonAcceptedContracts()
{
return $this->belongsToMany(UserContract::class,'invite','email','usercontract');
}
我需要它作为关系,因为我想这样在我的存储库中调用它。
public function showRelated(User $user)
{
$parentUser = $user->parentUser;
$usercontract = UserContract
::with(['topics','contracttax','contractproperty','persons','contractwarranty','contractencumbrance','users','contracts','tags'])
->whereHas('users',function ($query) use ($user,$parentUser) {
$user->loadMissing('nonAcceptedContracts');
dd($user->nonAcceptedContracts);
$query->where('id',$user->getAuthIdentifier());
if ($parentUser) {
$query->orWhere('parent',$parentUser->id);
}
if ($user->siblingUsers()->count() > 0) { // get contracts of the sibling-users of the user
$query->orWhereIn('id',$user->siblingUsers()->pluck('id'));
}
if ($user->subUsers->count() > 0) { // get contracts of the users sub-users
$query->orWhereIn('id',$user->subUsers->pluck('id'));
}
return $query;
})->orderBy('created_at','desc')->get();
}
我想我的问题是如何设置关系,以便使用其电子邮件作为键来获取该用户(对象)的用户合同,从而在邀请表上获取用户合同ID(用户合同)。
SELECT * FROM `usercontract` WHERE usercontract.id IN (SELECT invite.id FROM invite WHERE `invite`.`email` = 'someemail@gmail.com')
解决方法
public function nonAcceptedContracts()
{
return $this->belongsToMany(UserContract::class,'invite','email','usercontract','email')->where('status','pending');
}
该关系使用我的“邀请”表作为枢轴,并使用“电子邮件”,“用户合同”具有键并使用“用户”表的“电子邮件”过滤结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。