Laravel:多个table的关联使用枢轴
Laravel: Associations of multiple table using pivot
这是我的表格
板
id
board_name
classes
id
class_name
科目
id
subject_name
board_classes
id
board_id
class_id
board_class_subjects
id
board_id
class_id
subject_id
我在我的模型中写了以下关联
Board.php
public function classes()
{
return $this->belongsToMany('Clas','board_classes','board_id','class_id');
}
Clas.php
public function subjects()
{
return $this->belongsToMany('Subject','board_class_subjects','class_id', 'subject_id');
}
不确定在从上述关联中提取记录时我会在哪里提供 class_id 的条件。我试过了:
$response = Board::with('classes.subjects')->where('id', 1)->get();
我正在获取板 id 1 的所有 classes 的主题,但我想获得 class id 1 和板 id 1 的所有主题。
您必须使用whereHas
按相关模型过滤结果:
$response = Board::with('classes.subjects')
->where('id', 1)
->whereHas('classes', function($q){
$q->where('id', 1);
})
->get();
这将过滤掉没有 class 且 ID 为 1 但仍急切加载剩余板的所有 class 的板。要更改它,请将相同的过滤器添加到 with
:
$response = Board::with(['classes' => function($q){
$q->where('id', 1);
}, 'classes.subjects'])
->whereHas('classes', function($q){
$q->where('id', 1);
})
->find(1);
这是我的表格
板
id
board_name
classes
id
class_name
科目
id
subject_name
board_classes
id
board_id
class_id
board_class_subjects
id
board_id
class_id
subject_id
我在我的模型中写了以下关联
Board.php
public function classes()
{
return $this->belongsToMany('Clas','board_classes','board_id','class_id');
}
Clas.php
public function subjects()
{
return $this->belongsToMany('Subject','board_class_subjects','class_id', 'subject_id');
}
不确定在从上述关联中提取记录时我会在哪里提供 class_id 的条件。我试过了:
$response = Board::with('classes.subjects')->where('id', 1)->get();
我正在获取板 id 1 的所有 classes 的主题,但我想获得 class id 1 和板 id 1 的所有主题。
您必须使用whereHas
按相关模型过滤结果:
$response = Board::with('classes.subjects')
->where('id', 1)
->whereHas('classes', function($q){
$q->where('id', 1);
})
->get();
这将过滤掉没有 class 且 ID 为 1 但仍急切加载剩余板的所有 class 的板。要更改它,请将相同的过滤器添加到 with
:
$response = Board::with(['classes' => function($q){
$q->where('id', 1);
}, 'classes.subjects'])
->whereHas('classes', function($q){
$q->where('id', 1);
})
->find(1);