簡體   English   中英

Laravel 5.4-幾個表中的多個關系

[英]Laravel 5.4 - multiple relations in few tables

在下面的圖片中,我們可以看到我的表之間的關系。 我的目標是從driver_license_types獲取“ 類型 ”。 從用戶對象開始。 例如:

$user = User::find(1);

從那里我需要從driver_license_types獲取類型。 重要的是,講師在講師_許可證_類型表中幾乎沒有記錄,如下所示: 記錄講師的執照類型 我的桌子之間的關系

我當前的解決方案:

  • 在用戶模型中,我創建了方法指導者,它是關系“ belongTo”指導者模型。
  • 在講師模型中,我創建了方法許可證,它與Instructor_license_types之間的關系為“ hasMany”
  • 在Instructor_license_types中,我創建與Driver_license_types關系為“ hasMany”的方法類型。

最終代碼如下所示: 在此處輸入圖片說明

有沒有更好的解決方案?

您可以通過添加以下函數直接從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM