Laravel 按关系字段过滤项目
Laravel Filter Items by relationships field
我有以下查询:
$job = Job::with('customer', 'location', 'projects.transactions', 'projects.workorders.tasks','projects.workorders', 'projects.prods.category')
->find($id);
我如何才能只获得类别设置 show_in_products 设置为 true 的产品的结果?该字段在 projects.prods.category
中定义,我只想查看应显示的产品。我在全局范围或 whereHas
方面没有取得任何成功。请帮忙。
尝试这样的事情:
$job = Job::with('customer', 'location', 'projects.transactions', 'projects.workorders.tasks','projects.workorders', 'projects.prods', 'projects.prods.category')
whereHas('projects.prods.category', function($q) {
$q->where('show_in_products', true);
})->find($id);
希望对您有所帮助
only getting results for products that have a catagory setting of
show_in_products set to true
假设您的产品处于 prods
关系,那么您可以在 with('projects.prods')
中过滤您的产品
$job = Job::with([
'customer',
'location',
'projects.transactions',
'projects.workorders.tasks',
'projects.workorders',
'projects.prods' => function($prods) {
$prods->whereHas('category', function($category) {
$category->where('show_in_products', true);
})
->with('category');
}
])
->find($id);
所以你过滤了 projects.prods
的结果
通过 category
table $prods->whereHas(...)
中的约束
然后加载 category
和 prods
->with('category')
.
顺便说一下,with('projects.workorders')
是多余的,因为您已经有了 with('projects.workorders.tasks')
我有以下查询:
$job = Job::with('customer', 'location', 'projects.transactions', 'projects.workorders.tasks','projects.workorders', 'projects.prods.category')
->find($id);
我如何才能只获得类别设置 show_in_products 设置为 true 的产品的结果?该字段在 projects.prods.category
中定义,我只想查看应显示的产品。我在全局范围或 whereHas
方面没有取得任何成功。请帮忙。
尝试这样的事情:
$job = Job::with('customer', 'location', 'projects.transactions', 'projects.workorders.tasks','projects.workorders', 'projects.prods', 'projects.prods.category')
whereHas('projects.prods.category', function($q) {
$q->where('show_in_products', true);
})->find($id);
希望对您有所帮助
only getting results for products that have a catagory setting of show_in_products set to true
假设您的产品处于 prods
关系,那么您可以在 with('projects.prods')
$job = Job::with([
'customer',
'location',
'projects.transactions',
'projects.workorders.tasks',
'projects.workorders',
'projects.prods' => function($prods) {
$prods->whereHas('category', function($category) {
$category->where('show_in_products', true);
})
->with('category');
}
])
->find($id);
所以你过滤了 projects.prods
的结果
通过 category
table $prods->whereHas(...)
中的约束
然后加载 category
和 prods
->with('category')
.
顺便说一下,with('projects.workorders')
是多余的,因为您已经有了 with('projects.workorders.tasks')