猿问

如何从附加到特定 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 条记录。


GCT1015
浏览 197回答 2
2回答

喵喔喔

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

繁星淼淼

尝试这样的事情:在用户模型中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        }    }
随时随地看视频慕课网APP
我要回答