我的数据以下面显示的格式,这是许多与许多关系。
我只想从pivot中值的关系中检索那些条目(is_column1 = 0(。如何以雄辩的风格访问枢轴?
查询
$data = Relation1::with(['relation2' => function ($query){
$query->where('col4', '1');
$query->where('pivot.is_column1', '1'); // I want something like this
}])->get();
结果
[
{
"id": 1,
"name": "Test",
"relation2":
[
{
"id": 3,
"col2_id": 1,
"col3_id": 1,
"col4": "1",
"pivot": {
"col1_id": 1,
"col2_id": 2,
"is_column1": "1"
}
}
]
}
]
使用wherePivot()
方法:
Relation1::with(['relation2' => function ($query) {
$query->where('col4', '1')
->wherePivot('is_column1', '1');
}])
->get();
,如果您的枢轴表连接两个表(尤其是与多一部分的关系(,则要容易得多。我建议您创建一个枢轴表,哪个表名称必须按字母顺序排列(最好的方法是为此创建迁移(。
示例如果您有用户和标签,则枢轴表必须为单数
user_tag
user_tag
表必须具有user_id
和tag_id
列。
然后沿着用户php的行,制作一个函数,laravel可以理解它是属性
public function tags() {
$this->belongsToMany(Tag::class);
}
,反之亦然。在宣布模型之间的关系之后,Laravel将自动查看user_tag
表(请确保其按顺序排列,否则它将不起作用(。
您可以在这样的事情中做一些事情:
$user->tags; // returns all tag records in database associated in the pivot table
$tag->users; // returns all users associated with tag
这样做,您可以通过关系访问用户或标签的属性
$user->tags()->pluck('name');
类似的东西