如何在另一个表上使用Laravel Eloquent whereIn函数?

时间:2019-03-07 12:24:03

标签: laravel eloquent

如果两个表之间有关系,我正在使用with函数从另一个表中获取考虑条件内值的记录。例如:

Table::where('column1', 'text1')->with('table2.column2', 'text2')

我的问题是,如何使用whereIn函数在table2中设置允许值的数组?

Table::where('column1', 'text1')->whereIn('table2.column2', ['text2', 'text3'])

2 个答案:

答案 0 :(得分:1)

尝试一下

Table::where('column1', 'text1')
    ->whereHas('table2',function($q) {
        $q->whereIn('column2', ['text2','text3']);
    });

您必须在模型中定义关系

这是最佳做法

引用:Laravel Eloquent Relationship

引用:Query On Relationship

答案 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方法。