laravel关系过滤查询

时间:2015-04-01 18:08:41

标签: php laravel-4 eloquent

这是一个奇怪的。

我需要做的是过滤掉已经附加到当前项目的多个项目

因此,举个例子,我要说boxtool,我需要一个laravel查询来显示与当前tools无关的所有box。问题是该工具可以与不同的box相关联,所以即使我可以过滤关系,我也不能保证另一种关系可能仍然使tool看起来还没有关联。< / p>

$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();

这或多或少是我目前使用的,它可以过滤一些项目,但如果一个工具与多个框相关联,它就会失败。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这可以为您提供当前包装盒中的所有工具:

$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();