如果两个表之间有关系,我正在使用with
函数从另一个表中获取考虑条件内值的记录。例如:
Table::where('column1', 'text1')->with('table2.column2', 'text2')
我的问题是,如何使用whereIn
函数在table2
中设置允许值的数组?
Table::where('column1', 'text1')->whereIn('table2.column2', ['text2', 'text3'])
答案 0 :(得分:1)
尝试一下
Table::where('column1', 'text1')
->whereHas('table2',function($q) {
$q->whereIn('column2', ['text2','text3']);
});
您必须在模型中定义关系
这是最佳做法
答案 1 :(得分:1)
我会选择Laravel's Constrained eager load来加载您的关系。
示例
Table::where('column1', 'text1')
->with(['table2' => function ($query) {
$query->whereIn('column2', ['text2', 'text3'])
}])
->get();
如果您不需要加载关系,那么最好使用@bhavinjr提供的whereHas
解决方案。
从文档中:
急于加载多个关系
有时您可能需要在单个操作中急于加载几个不同的关系。为此,只需将其他参数传递给with方法:
$books = App\Book::with(['author', 'publisher'])->get();
约束渴望的负载
有时您可能希望加载一个关系,但也希望为加载加载查询指定其他查询条件。这是一个示例:
$users = App\User::with(['posts' => function ($query) { $query->where('title', 'like', '%first%'); }])->get();`
您可以看看Laravel API来更深入地了解with
方法。