Laravel: Как легко получить значения из таблицы с полиморфными отношениями красноречивой модели? - PullRequest
0 голосов
/ 30 июня 2018

В моей таблице базы данных есть список сотрудников:

Таблица: Сотрудники

enter image description here

Код модели сотрудника:

public function workplace()
{
    return $this->morphTo();
}

Код модели компании:

public function workers()
{
    return $this->morphMany('App\Employee', 'company');
}

Код модели филиала:

public function workers()
{
    return $this->morphMany('App\Employee', 'company');
}

Теперь я получаю рабочие места пользователя в другой форме:

$userWorkplaces = Employee::where('user_id', Auth::id())->get();
$workplace_info = [];

foreach ($userWorkplaces as $workplace) {
    if($workplace->company_type == "App\Company") {
        $company = Company::findOrFail($workplace->company_id);
        $type = 'Company';
    } elseif($workplace->company_type == "App\Branch") {
        $company = Branch::findOrFail($workplace->company_id);
        $type = 'Branch';
    }

    $workplace_info[] = [
        'company' => $company->name,
        'type' => $type
    ];
}

dump($workplace_info);

Результат:

array:3 [
  0 => array:2 [
    "company" => "Mahorat"
    "type" => "Company"
  ]
  1 => array:2 [
    "company" => "Babolo"
    "type" => "Company"
  ]
  2 => array:2 [
    "company" => "Филиал Махорат"
    "type" => "Branch"
  ]
]

Как я могу легко получить образец результата, создавая отношения моделей в моделях?

1 Ответ

0 голосов
/ 30 июня 2018

Вам необходимо изменить имя функции отношения Employee company, поскольку в таблице сотрудников есть поля company_id и company_type

Код модели сотрудника:

public function company()
{
    return $this->morphTo();
}

Теперь получить данные

$employees = Employee::where('user_id', Auth::id())->get();
$workplace_info = [];
foreach($employees as $employee){
   $workplace_info[]['company'] = $employee->company;
   $workplace_info[]['type'] = get_class($employee->company);
}

dd($workplace_info);

Подробности https://laravel.com/docs/5.6/eloquent-relationships#polymorphic-relations

...