[英]Laravel 5.4 - multiple relations in few tables
在下面的圖片中,我們可以看到我的表之間的關系。 我的目標是從driver_license_types獲取“ 類型 ”。 從用戶對象開始。 例如:
$user = User::find(1);
從那里我需要從driver_license_types獲取類型。 重要的是,講師在講師_許可證_類型表中幾乎沒有記錄,如下所示:
我當前的解決方案:
有沒有更好的解決方案?
您可以通過添加以下函數直接從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),更多信息在此你可以看到文檔在這里 。
如果您在Instructor
模型中沒有為DriverLicenseType
設置belongsToMany
關系,我建議您輸入以下內容:
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];
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.