Laravel雄辩-数据透视表

时间:2018-11-17 14:18:47

标签: laravel

我有这张桌子:

Attendances
id | member_id
1  | 1
2  | 2
3  | 3

Members
id | name
1  | Joe
2  | Jane
3  | David

Positions
id | position_name
1  | art
2  | singer
3  | dancer

member_position
member_id | position_id
1         | 2 
1         | 1
1         | 3
2         | 1
2         | 2
3         | 3

从出勤表中,我如何选择所有使用laravel雄辩的歌手参加过演唱会?

==== EDIT =====

出勤模式:

public function member()
{
  return $this->belongsTo('App\Member');
}

会员型号:

public function positions()
{
  return $this->belongsToMany('App\Position');
}

位置模型:

public function members() 
{
  return $this->belongsToMany('App\Member');
}

2 个答案:

答案 0 :(得分:1)

您应该使用带有嵌套关系的whereHas方法。

$attendances = Attendance::with('member')
    ->whereHas('member.positions', function($query){
        $query->where('id', 2);
    })
    ->get();

foreach($attendances as $attendance){
    echo $attendance->member->id;
}

答案 1 :(得分:1)

我很肯定,这将为您提供成员为歌手且具有嵌套成员关系模型的出席者。

insert into Table_A (EntryID, FirstName)
output inserted.EntryID, inserted.FirstName into Table_B (EntryID, Firstname)
values (102, 'Fred')


select * 
from ILR_Test 
where EntryID = 102

然后,您可以依次遍历结果:

$attendances = Attendance::whereHas('member.positions', function($query) {

   $query->where('position_name', 'singers');

})->with('member')->get();