将where()方法用于laravel雄辩模型

gcmastyq  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(343)

所以我有一个laravel应用程序,它包含了许多不同的模型,有些模型依赖于另一个模型。在标准sql中,您将使用一个简单的join语句并完成它。然而,laravels雄辩的模型提供了很容易建立这些关系的函数(即hasone、hasmany等)。因此,我定义了与后一种方法的关系,并实际成功地使用了它们。
尝试使用雄辩模型及其定义的关系:

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() 所以我的问题是如何命名 whereIn() 方法同时使用拉维尔斯雄辩的关系。或者我需要使用join方法来访问这些列吗?
这是最初的错误
sqlstate[42s22]:未找到列:“where子句”中的1054未知列“vehicle\u makes.id”(sql:select count(*)as aggregate from) vehicles 哪里 vehicle_makes . id 在(1,2,3,4,5)中。
“vehicle\u makes”是原始表名,但不起作用。
任何帮助都将不胜感激。。

xlpyo6sf

xlpyo6sf1#

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

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

另请参见查询关系存在部分

相关问题