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

Laravel 5.4 - 几个表中的多个关系

Laravel 5.4 - 几个表中的多个关系

PHP
慕丝7291255 2021-06-29 09:00:26
在下面的图片中,我们可以看到我的表之间的关系。我的目标是从driver_license_types获取“类型” 。从用户对象开始。例如:$user = User::find(1);从那里我需要从 driver_license_types 获取类型。重要的是,教师在instructor_license_types 表中可以有很少的记录,如下所示:我目前的解决方案:在用户模型中,我创建了方法指导者,它是关系“属于”指导者模型。在 Instructor 模型中,我创建了与 Instructor_license_types 关系为“hasMany”的方法许可证在 Instructor_license_types 中,我创建了与 Driver_license_types 关系为“hasMany”的方法类型。最终代码如下所示:有没有更好的解决方案?
查看完整描述

2 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

如果您没有belongsToMany在Instructor模型中建立关系,DriverLicenseType我建议您将其放入:


public function licenseTypes()

{

    return $this->belongsToMany(DriverLicenseType::class, 'instructors_license_types', 'instructor_id', 'driver_license_type_id');

}

$user = User::find(1);


$licenseTypes = $user->instructor->licenseTypes->pluck('type')->unique();

或者,如果您需要$licenseTypes采用问题中的格式,您可以执行以下操作:


$licenseTypes = $user->instructor->licenseTypes->map(function ($item) {

    return [$item->id, $item->type];

});


查看完整回答
反对 回复 2021-07-02
?
临摹微笑

TA贡献1982条经验 获得超2个赞

通过添加以下函数,您可以直接从 Instructors 模型中获取 driver_license_types:


//PathToModel\Instructor.php


public function license_types()

{

    return $this->belongsToMany('PathToModel\LicenseTypes', 'instructors_license_types');

}

还将其添加到 LicenseType 模型中:


//PathToModel\LicenseTypes.php


public function instructors()

{

    return $this->belongsToMany('PathToModel\Instructors', 'instructors_license_types');

}

通过这种方式,您将能够删除代码中的 foreach 语句之一:


$user = User::find($id);

if($user->instructor){

    $tmp = [];

    foreach ($user->instructor->license_types as $data) {

        array_push($tmp, [$data->id, $data->type]);

    }

    $user->types = $tmp;

}

这只是跳过数据透视表(instructos_license_types),有关这方面的更多信息,您可以在此处查看文档。


查看完整回答
反对 回复 2021-07-02
  • 2 回答
  • 0 关注
  • 153 浏览

添加回答

举报

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