我已经建立了如下所示的关系
用户模型
public function branches()
{
return $this->belongsToMany('Branch', 'branch_user', 'user_id', 'branch_id');
}
public function reservations() {
return $this->hasMany('Reservation');
}
分支模型
public function users()
{
return $this->belongsToMany('User', 'branch_user', 'branch_id', 'user_id');
}
预订模式
public function branches() {
return $this->BelongsTo('Branch');
}
分支有很多保留,分支属于分支。
请问我如何进行以下查询
select table_number from reservations r
JOIN branches b
ON b.id = r.branch_id
JOIN branch_staff bs
ON bs.branch_id = b.id
WHERE bs.user_id = 1
使用Eloquent?
我已完成上述查询
DB::table('reservations')
->join('branches', 'branches.id', '=', 'reservations.branch_id')
->join('branch_staff', 'branch_staff.branch_id', '=', 'branches.id')
->where ('branch_staff.user_id', '=', Auth::user()->id)
->select('reservations.table_number', 'reservations.active')
->orderBy('reservations.table_number', 'asc')
->get();
使用查询构建器。
关系 但是我怎么能使用Eloquent来做这件事,特别是在我定义关系的时候?
答案 0 :(得分:2)
首先,我认为您可能错误地设置了模型。从您的SQL看起来用户有一个分支,而不是很多。如果预订属于分支机构,您可以调用方法'分支机构'而不是'分支'。
我会像这样设置模型:
用户模型
public function branch()
{
return $this->belongsTo('Branch');
}
分支模型
public function users()
{
return $this->hasMany('User');
}
public function reservations()
{
return $this->hasMany('Reservation');
}
预订模式
public function branch() {
return $this->belongsTo('Branch');
}
然后,您可以使用以下代码获取分支人员的有序Auth :: user()表编号列表:
$tableNumbers = Auth::user()->branch->reservations()->orderby('reservations.table_number', 'asc')->lists('table_number');
答案 1 :(得分:0)
没有@Vokemike
,这个答案是不可能的我一直在使用$ reservations收集错误,因为branches返回了一个集合,所以为了解决这个问题,我不得不循环它,这就是我做的方式
$user_branch = Auth::user()->branches;
foreach ($user_branch as $branch) {
return $branch->reservations()->orderby('reservations.table_number', 'asc')->lists('table_number');
}