因此,我有一个laravel应用,其中包含许多不同的模型,其中一些依赖于另一个模型。在标准SQL中,您将使用简单的join语句并完成它。但是,Laravels口才模型提供了轻松建立这些关系的功能(即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()
所以我的问题是,在使用laravel雄辩的关系时,如何在whereIn()
方法中命名列参数。还是我需要使用join方法来访问这些列?
这是原始错误
SQLSTATE [42S22]:找不到列:1054“ where子句”中的未知列“ vehicle_makes.id”(SQL:从vehicles
的{{1}}中选择count(*)作为聚集。{{ 1}}在(1、2、3、4、5)中。
“ vehicle_makes”是原始表名,但不起作用。
任何帮助将不胜感激。
答案 0 :(得分:1)
我从您的问题中得出的假设是,您想对与您的模型相关联的相关模型使用过滤器,为此您可以使用whereHas()
$vendorIds = [1, 2, 3, 4, 5];
$vehicles= vehicle::with([....])
->whereHas('modeldetails.model.vendor', function ($query) use ($vendorIds) {
$query->whereIn('id',$vendorIds);
})->get();