laravel 关系过滤查询
laravel relationship filter query
这很奇怪。
我需要做的是过滤掉已经附加到当前项目的任何多对多项目
为了举例,让我们说 box
和 tool
,我需要一个 laravel 查询来显示与当前 [=12] 无关的所有 tools
=].问题是该工具也可以与不同的 box
相关联,所以即使我可以过滤关系,我也不能保证另一个关系可能仍然使 tool
看起来像是尚未关联。
$data = Tool::select(
'tools.id',
'tools.name',
'tool_box.box_id')
->distinct()
->join('boxes', 'tools.id', '=', 'tool_box.tool_id')
->where('tool_box.box_id', '!=', $id)
->get();
这或多或少是我目前正在使用的,它可以过滤一些项目,但如果一个工具与一个以上的盒子相关联,它就会失败。
有什么想法吗?
这应该会为您提供当前包装盒中没有的所有工具:
$data = Tool::select(
'tools.id',
'tools.name',
'tool_box.box_id')
->distinct()
->join('tool_box', 'tools.id', '=', 'tool_box.tool_id')
->whereNotIn('tools.id',
DB::table('tool_box')
->join('tools', 'tools.id', '=', 'tool_box.tool_id')
->where('tool_box.id', '<>', $id)
->lists('tools.id')
)
->get();
这很奇怪。
我需要做的是过滤掉已经附加到当前项目的任何多对多项目
为了举例,让我们说 box
和 tool
,我需要一个 laravel 查询来显示与当前 [=12] 无关的所有 tools
=].问题是该工具也可以与不同的 box
相关联,所以即使我可以过滤关系,我也不能保证另一个关系可能仍然使 tool
看起来像是尚未关联。
$data = Tool::select(
'tools.id',
'tools.name',
'tool_box.box_id')
->distinct()
->join('boxes', 'tools.id', '=', 'tool_box.tool_id')
->where('tool_box.box_id', '!=', $id)
->get();
这或多或少是我目前正在使用的,它可以过滤一些项目,但如果一个工具与一个以上的盒子相关联,它就会失败。
有什么想法吗?
这应该会为您提供当前包装盒中没有的所有工具:
$data = Tool::select(
'tools.id',
'tools.name',
'tool_box.box_id')
->distinct()
->join('tool_box', 'tools.id', '=', 'tool_box.tool_id')
->whereNotIn('tools.id',
DB::table('tool_box')
->join('tools', 'tools.id', '=', 'tool_box.tool_id')
->where('tool_box.id', '<>', $id)
->lists('tools.id')
)
->get();