将 whereIn() 方法与 laravel Eloquent 模型一起使用

Posted

技术标签:

【中文标题】将 whereIn() 方法与 laravel Eloquent 模型一起使用【英文标题】:Using whereIn() method with laravel Eloquent Model 【发布时间】:2018-12-13 05:38:06 【问题描述】:

所以我有一个 laravel 应用程序,其中包含许多不同的模型,有些依赖于另一个模型。在标准 SQL 中,您将使用一个简单的连接语句并完成它。然而,Laravel Eloquent Models 提供了轻松建立这些关系的函数(即 hasOne、hasMany 等)。所以我用后一种方法定义了我的关系,并实际成功地使用了它们。

尝试在此处使用 Eloquent 模型及其定义的关系:

 vehicle::with(['colors:id,Color', 'damages:id,Damage','secondaryDamages:id,Damage',
'modeldetails.model','modeldetails.engine_type',
'modeldetails.fuel_type','modeldetails.transmission_type',
'modeldetails.body_type','modeldetails.drive_type, 'modeldetails.model.vendor','auctionday']);

但是当我尝试将此命令与 whereIn().

     vehicle::with(['colors:id,Color', 'damages:id,Damage','secondaryDamages:id,Damage',
    'modeldetails.model','modeldetails.engine_type',
    'modeldetails.fuel_type','modeldetails.transmission_type',
    'modeldetails.body_type','modeldetails.drive_type, 'modeldetails.model.vendor','auctionday'])
->whereIn([id, $arrayofValuetoMatch]);

查看查询表的“id”工作正常,这是当我查询属于其他表的其他列时,例如 'modeldetails.model.vendor.id' 这会导致**错误 用于未知列。**如果它代替了whereIn() 中的 id

所以我的问题是如何在使用 laravel 雄辩关系的同时在 whereIn() 方法中命名列参数。还是我需要使用 join 方法才能访问这些列?

这是原来的错误

SQLSTATE[42S22]:未找到列:1054 'where 子句'中的未知列'vehicle_makes.id'(SQL:从vehicles 中选择计数(*)作为聚合,其中vehicle_makes.id 在(1 , 2, 3, 4, 5))。

“vehicle_makes”是原始表名,但它不起作用。

任何帮助将不胜感激..

【问题讨论】:

您确定您使用的是withIn() 而不是whereIn() 吗?我没有在 laravel 中看到 withIn() 方法 抱歉打错了 【参考方案1】:

我从您的问题中假设您想对与您的模型关联的相关模型使用过滤器,您可以为此使用whereHas()

$vendorIds = [1, 2, 3, 4, 5];
$vehicles= vehicle::with([....])
                  ->whereHas('modeldetails.model.vendor', function ($query) use ($vendorIds) 
                        $query->whereIn('id',$vendorIds);
                  )->get();

另见Querying Relationship Existence部分

【讨论】:

工作得很好,谢谢,但是不完全理解你正在使用的代码是个坏习惯,你能解释一下 whereHas() 的第二个参数吗?我从未见过将“使用”与函数一起使用。这是 laravel 特有的吗? @CalixteSimeon 它不是一个复杂的东西,也不是与 laravel 相关的,它只是一个闭包函数,意味着whereHas 接受一个回调函数,要将附加参数传递给闭包函数,您需要“使用”关键字看看在php.net/manual/en/functions.anonymous.php 获得更多说明

以上是关于将 whereIn() 方法与 laravel Eloquent 模型一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中将两个分组的 whereIn 子句与 Where not 组合

Laravel Eloquent 多对多查询 whereIn

Laravel whereIn 或 whereIn

Laravel:带有变量的whereIn

Laravel 过滤多个 WhereIn 数组

Laravel Query Builder 在“whereIn”语句的子查询中使用父查询?