Php 如何将附加到特定用户id的数据透视表中的记录获取到其他表中
我用的是拉威尔。我有车辆和用户表的多对多关系。所以有三张桌子Php 如何将附加到特定用户id的数据透视表中的记录获取到其他表中,php,laravel,Php,Laravel,我用的是拉威尔。我有车辆和用户表的多对多关系。所以有三张桌子 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) 现在,我有一辆车和一个用户。但车内用户有5条记录。他们每个人都有相同的用户id和车辆id 问题:我想通过laravel雄辩的无
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)
现在,我有一辆车和一个用户。但车内用户有5条记录。他们每个人都有相同的用户id
和车辆id
问题
:我想通过laravel雄辩的无连接来实现这一点
我如何从pivot表中获取所有这5条记录及其相应的创建值,以及vehicles
表中的一些列,然后,我还应该能够提供,其中用户id=5
我尝试了:Vehicle::with('users')
,但这只返回vehicles表中的一条记录。尝试以下方法:
在用户模型中
public function vehicles()
{
return $this->belongsToMany('App\Vehicle')
->withTimestamps();
}
如果需要的话,你可以倒过来
现在,如果您想在控制器中获取用户的车辆
public function getVehicles($id)
{
$user = User::find($id);
foreach ($user->vehicles as $vehicle)
{
echo $vehicle->pivot->created_at; //this is coming from the pivot table
echo $vehicle->info; //this is from the vehicle table
}
}
我不得不假设您已经正确设置了模型关系,因为您没有提供模型代码来查看
值得注意的是,Laravel会自动尝试根据两个主表按字母顺序计算出数据透视表的内容,并且由于u位于v之前,默认数据透视将是user\u vehicle
而不是vehicle\u user
。您可以保持这种方式,但需要更新模型中的关系以反映这一点
现在,我有一辆车和一个用户。但车内用户有5个
记录。他们每个人都有相同的用户id和车辆id
这似乎很奇怪。如果您的用户
和车辆
表中只有一条记录,您的数据透视中也应该只有一条记录。也许你的验证有问题
我如何从数据透视表中获取所有这5条记录及其
相应的值和车辆中的一些列
表之后,我还应该能够提供where user\u id=
五,
如果您想返回的主要内容是数据透视表,而<代码>车辆< /代码>或<代码>用户< /代码>表数据,我将考虑将PIOVT作为自己的模型。与用户和车辆都有一个关系。然后你可以做类似的事情
UserVehicle::with('vehicle')->whereHas('user', function($query){
$query->where('id', 5);
})->get();
这将返回主数据透视表数据及其相关的车辆型号列,其中用户id=5。因此基本上,我得到了用户和车辆。用户来搜索车辆。我想存储哪个用户在什么时间搜索了什么内容。这就是为什么我有透视表。(id、用户id、车辆id、创建位置)。你认为这个模式做得不正确吗?如果你专门记录用户搜索,我可能会创建一个搜索表,将关系返回到用户和车辆,而不是实际的轴心。因为轴心表示用户有很多车辆,而他们没有。他们只是在找。人们在寻找什么?您如何知道车辆ID是用户搜索的车辆ID?我可能只需要他们搜索的任何东西的字符串列。