我一直在尝试查询,我想在相关表上进行一些验证。我想用Laravel 5做这样的事情
select
*
from
table1
INNER JOIN table3 on(table1.id = table3.table1_id)
INNER JOIN table2 on(table1.id = table2.table1_id)
where
table2.column2 in ('arr1', 'arr2');
另外table1与5-7个表相关,我想急切加载所有这些。这是我到目前为止所做的事情
$reports = Table1::with(
[
'table3',
'table4',
'table5.table6',
'table7',
'table8',
])
->where('created_at', '>=', date('Y-m-d', strtotime($request->get('from'))))
->where('created_at', '<', date('Y-m-d', strtotime($request->get('to'))))
->with('table2',function($query) use($table1_column){
return $query->whereIn('table1_column',$table1_column);
});
但这显示了一切。甚至表2中不存在的项目。我想要实现的是创建一个结果,其中所有项目是table2中存在的唯一项目。表示使用table2中的项目进行的所有事务。 假设table2中的项目的id为123,456和789,那么我想显示与此id的所有相关的记录
如何制作此类结果
答案 0 :(得分:1)
您可以使用whereHas
方法。
$reports = Table1::with(
[
'table3',
'table4',
'table5.table6',
'table7',
'table8',
])
->whereHas('table2', function($query) use($table1_column){
return $query->whereIn('table1_column',$table1_column);
})
->where('created_at', '>=', date('Y-m-d', strtotime($request->get('from'))))
->where('created_at', '<', date('Y-m-d', strtotime($request->get('to'))));
请注意,这不包括结果集中的表2数据。如果需要,请在with
方法调用中包含table2关系名称。