Laravel Пользователи и полиморфизм - PullRequest
1 голос
/ 10 июля 2019

В настоящее время используется стандартная аутентификация пользователей для Laravel (php artisan make:auth), а затем объединяется с spatie/laravel-permission.

У меня такой вопрос, у меня разные типы пользователей

  • Студенты
  • Стипендиаты-администраторы
  • Поставщики стипендий
  • Супер Администраторы

У меня есть роли «Пространство» для вышеперечисленного, и я могу назначать их различным пользователям. Сохраняя текущую таблицу пользователей / систему нетронутой, как бы я назначил «тип» пользователям. Должен ли я пойти дальше и установить отношение типа 'morphOne' (, как показано здесь ) или я должен просто установить поле tinyint, которое определяет тип (0 = SuperAdmin, 1 = Student и т. Д. И т. Д.)?

// редактировать Точно так же мне нужно хранить родительский объект, к которому он принадлежит. То есть администратор стипендии может иметь много пользователей, а поставщик стипендии может иметь много пользователей. Мне нужно хранить parent_id для пользователя. Таким образом, это означает, что я должен пойти по маршруту отношений и добавить «полезную» таблицу и сохранить:

  • userable_type = тип модели (стипендиат администратор / поставщик / студент)
  • userable_id = родительский идентификатор

// редактировать 2

Так что теперь у меня есть следующие изменения:

//Bursary Administrators & Bursary Providers models have:
public function users() {
    return $this->morphMany('App\Users', 'userable');
}

Создана миграция для изменения таблицы Users:

    Schema::table('users', function (Blueprint $table) {
        $table->integer('userable_id')->index('userable_id_index');
        $table->string('userable_type');
    });

И сделал необходимые дополнения модели пользователя:

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

Мой вопрос теперь трансформировался; следующим образом:

Я могу получить список пользователей Bursary Provider, выполнив:

$bp = App\BursaryProviders::find(1);
foreach ($bp->users as $user) {
    //
}

Предположим, что пользователь Bursary Provider вошел в систему и создал нового пользователя; как получить идентификатор провайдера стипендии, вошедшего в систему в данный момент, чтобы у созданного пользователя был тот же провайдер стипендии?

т:

user_id = 123
& its bursary_provider_id = 1

user_id(123) creates user_id(124) 
// How do I assign user_id(124) to have its bursary_provider_id=1 ?
...