将 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 组合