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

在下面的图片中,我们可以看到我的表之间的关系。我的目标是从driver_license_types获取“类型” 。从用户对象开始。例如:

$user = User::find(1);

从那里我需要从 driver_license_types 获取类型。重要的是,教师在instructor_license_types 表中可以有很少的记录,如下所示:

http://img.mukewang.com/60de78470001d43404770098.jpg

http://img2.mukewang.com/60de78500001ac6705600594.jpg

我目前的解决方案:

  • 在用户模型中,我创建了方法指导者,它是关系“属于”指导者模型。

  • 在 Instructor 模型中,我创建了与 Instructor_license_types 关系为“hasMany”的方法许可证

  • 在 Instructor_license_types 中,我创建了与 Driver_license_types 关系为“hasMany”的方法类型。

最终代码如下所示:

http://img4.mukewang.com/60de785d0001dc7307860312.jpg

有没有更好的解决方案?


慕丝7291255
浏览 154回答 2
2回答

蓝山帝景

如果您没有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];});

临摹微笑

通过添加以下函数,您可以直接从 Instructors 模型中获取 driver_license_types://PathToModel\Instructor.phppublic function license_types(){    return $this->belongsToMany('PathToModel\LicenseTypes', 'instructors_license_types');}还将其添加到 LicenseType 模型中://PathToModel\LicenseTypes.phppublic 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),有关这方面的更多信息,您可以在此处查看文档。
打开App,查看更多内容
随时随地看视频慕课网APP