Красноречивый запрос с помощью сводной таблицы - PullRequest
0 голосов
/ 29 июня 2018

У меня есть вопрос о том, как сгенерировать запрос с помощью eloquent, и я был бы признателен за любую помощь от вас.

У меня есть 4 таблицы в моей базе данных: 1. модули 2. роли 3. module_rol (сводная таблица) 4. регионы

Структура таблиц:

  1. модули: id int строка имени регион int активный bool

  2. роли id int Строка имени

  3. module_rol rol_id int module_id int

  4. регионы id int Строка имени

Мне нужно получить все значения из таблицы модулей с некоторыми условиями, например ..

public function getUserModules($rol, $region)
{
 // Return all modules to which that role is allowed to access and have that region defined
}

В ожидании помощи, большое спасибо заранее

РЕДАКТИРОВАТЬ 1:

Schema::create('regions', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });



Schema::create('modules', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->integer('region')->unsigned();
            $table->boolean('active')->default(true);
            $table->timestamps();

            $table->foreign('region')
                ->references('id')->on('regions')
                ->onDelete('cascade');
        });



Schema::create('roles', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });



Schema::create('module_rol', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('rol_id');
            $table->integer('module_id');
            $table->timestamps();

            $table->foreign('rol_id')
                ->references('id')->on('roles')
                ->onDelete('cascade');
            $table->foreign('module_id')
                ->references('id')->on('modules')
                ->onDelete('cascade');
        });

1 Ответ

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

Вам необходимо определить отношение ManyToMany между модулем и ролью, используя сводную таблицу

Модель модуля

public function roles(){
    return $this->belongsToMany(Role::class, 'module_rol');
}

public function region(){
    return $this->belongsTo(Region::class, 'region');
}

Ролевая модель

public function modules(){
        return $this->belongsToMany(Module::class, 'module_rol');
}

Получить данные

public function getUserModules($role, $region)
{
 // Return all modules to which that role is allowed to access and have that region defined
    $modules = Module::where('region', $region->id)
                     ->whereHas(['roles' => function($query) use ($role) {
                        return $query->where('role_id', $role->id)
                     }])->get();
    return $modules;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...