首页 > 解决方案 > 如何从附加到特定 user_id 的数据透视表中获取记录到其他表中

问题描述

我正在使用laravel。我对车辆和用户表有多对多的关系。所以有3张桌子。

vehicles(id, vrm_id, info, created_at, updated_at)

users(id, name, created_at, updated_at)

vehicle_user(id, user_id, vehicle_id, created_at, updated_at)

现在,我得到了一辆车和一个用户。但是在 vehicle_users 中有 5 条记录。相同user_id,并且vehicle_id对于他们每个人。

Question:我想用 laravel eloquent 来实现这一点,而无需加入。

我如何从数据透视表中获取所有这 5 条记录及其相应的created_at值以及表中的一些列vehicles,之后,我也应该能够提供where user_id = 5.

我试过了:Vehicle::with('users')但这只会从车辆表中返回 1 条记录。

标签: phplaravel

解决方案


我不得不假设您已经正确设置了模型关系,因为您没有提供模型代码来查看。

值得注意的是,Laravel 会自动尝试根据 2 个主表按字母顺序计算数据透视表的内容,并且由于 u 在 v 之前,默认的数据透视表user_vehicle不是vehicle_user。您可以保持这种方式,但您需要更新模型中的关系以反映这一点。

现在,我得到了一辆车和一个用户。但是在 vehicle_users 中有 5 条记录。每个人都有相同的 user_id 和 vehicle_id。

这似乎很奇怪。如果您的每个uservehicle表中只有 1 条记录,那么您的数据透视表中也应该只有 1 条记录。也许您的验证有问题?

如何从数据透视表中获取所有这 5 条记录及其对应的 created_at 值以及车辆表中的一些列,之后,我还应该能够提供 where user_id = 5

如果您要返回的主要内容是数据透视表,而不是数据vehicleuser表数据,我会考虑让数据透视表本身成为模型。与用户和车辆的 hasOne 关系。那么你可以做类似的事情

UserVehicle::with('vehicle')->whereHas('user', function($query){
    $query->where('id', 5);
})->get();

这将为您返回主数据透视表数据及其相关的车辆模型列,其中用户 id = 5。


推荐阅读