如何使用数据透视表和使用FK的另一个表进行连接查询

时间:2015-03-07 03:01:51

标签: laravel laravel-4 eloquent

我已经建立了如下所示的关系

用户模型

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();

使用查询构建器。

关系 enter image description here 但是我怎么能使用Eloquent来做这件事,特别是在我定义关系的时候?

2 个答案:

答案 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');
 }