为了账号安全,请及时绑定邮箱和手机立即绑定

如何从附加到特定 user_id 的数据透视表中获取记录到其他表中

如何从附加到特定 user_id 的数据透视表中获取记录到其他表中

PHP
GCT1015 2021-11-05 15:41:04
我正在使用 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 条记录。
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

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


值得注意的是,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。


查看完整回答
反对 回复 2021-11-05
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

尝试这样的事情:


在用户模型中


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

        }

    }


查看完整回答
反对 回复 2021-11-05
  • 2 回答
  • 0 关注
  • 188 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信