Laravel Полиморфные отношения на одном столе (разные менеджеры пользователей) - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть таблица пользователей, где каждому пользователю может быть назначен менеджер. У меня есть 3 типа Менеджеров (Региональный менеджер, Региональный менеджер и Менеджер флота). Один региональный менеджер может иметь много менеджеров флота и странового менеджера, а один региональный менеджер может иметь много менеджеров флота. В моей таблице пользователей есть столбцы fleet_manager_id, country_manager_id, area_manager_id, которые ссылаются на id таблицы пользователей. Вопрос в том, что я не знаю, как установить полиморфные отношения на одной и той же таблице. Миграция:

Schema::table('users', function (Blueprint $table) {
    $table->integer('fleet_manager_id')->unsigned()->nullable();
    $table->foreign('fleet_manager_id')->references('id')->on('users');
    $table->integer('country_manager_id')->unsigned()->nullable();
    $table->foreign('country_manager_id')->references('id')->on('users');
    $table->integer('area_manager_id')->unsigned()->nullable();
    $table->foreign('area_manager_id')->references('id')->on('users');
});

Моя модель пользователя:

public function fleetManagers()
{
    return $this->hasMany(User::class, 'fleet_manager_id');
}

public function countryManager()
{
    return $this->belongsTo(User::class, 'country_manager_id');
}

public function areaManager()
{
    return $this->belongsTo(User::class, 'area_manager_id');
}

1 Ответ

0 голосов
/ 16 сентября 2018

Итак, это решение, к которому я пришел:

public function managedByArea()
{
    return $this->hasMany(User::class, 'area_manager_id');
}

public function area_manager()
{
    return $this->belongsTo(User::class, 'area_manager_id');
}

public function managedByCountry()
{
    return $this->hasMany(User::class, 'country_manager_id');
}

public function country_manager()
{
    return $this->belongsTo(User::class, 'country_manager_id');
}
public function managedByFleet()
{
    return $this->hasMany(User::class, 'fleet_manager_id');
}

public function fleet_manager()
{
    return $this->belongsTo(User::class, 'fleet_manager_id');
}
...