php - 如何从附加到特定 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 条记录。
解决方案
我不得不假设您已经正确设置了模型关系,因为您没有提供模型代码来查看。
值得注意的是,Laravel 会自动尝试根据 2 个主表按字母顺序计算数据透视表的内容,并且由于 u 在 v 之前,默认的数据透视表user_vehicle
不是vehicle_user
。您可以保持这种方式,但您需要更新模型中的关系以反映这一点。
现在,我得到了一辆车和一个用户。但是在 vehicle_users 中有 5 条记录。每个人都有相同的 user_id 和 vehicle_id。
这似乎很奇怪。如果您的每个user
和vehicle
表中只有 1 条记录,那么您的数据透视表中也应该只有 1 条记录。也许您的验证有问题?
如何从数据透视表中获取所有这 5 条记录及其对应的 created_at 值以及车辆表中的一些列,之后,我还应该能够提供 where user_id = 5
如果您要返回的主要内容是数据透视表,而不是数据vehicle
或user
表数据,我会考虑让数据透视表本身成为模型。与用户和车辆的 hasOne 关系。那么你可以做类似的事情
UserVehicle::with('vehicle')->whereHas('user', function($query){
$query->where('id', 5);
})->get();
这将为您返回主数据透视表数据及其相关的车辆模型列,其中用户 id = 5。