在Laravel雄辩模型中使用whereIn()方法

时间:2018-07-04 18:40:47

标签: php mysql laravel eloquent

因此,我有一个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()

中代替了id

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

这是原始错误

SQLSTATE [42S22]:找不到列:1054“ where子句”中的未知列“ vehicle_makes.id”(SQL:从vehicles的{​​{1}}中选择count(*)作为聚集。{{ 1}}在(1、2、3、4、5)中。

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

任何帮助将不胜感激。

1 个答案:

答案 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();

另请参阅第Querying Relationship Existence