Подскажите. Делаю файловый менеджер и нужно реализовать доступы. Связи: файл, категория файла, пользователь, категория пользователей.
(Может подскажите другую реализацию, если я делаю неправильно или неуместно)
Вот таблица из миграции:
Schema::create('access_file_user_file_category_user_category', function (Blueprint $table) {
$table->id();
$table->integer("model_file_id");
$table->integer("model_user_id");
$table->enum('model_files', ["file", "file_category"]);
$table->enum('model_users', ["user", "user_category"]);
$table->enum('access', ["allow", "disallow"]);
$table->timestamps();
});
Вот в модели связь:
public function access($value) {
switch ($value) {
case "user":
$class = User::class;
break;
case "user_category":
$class = UserCategory::class;
break;
}
return $this->belongsToMany($class, "access_file_user_file_category_user_category", "model_file_id", "model_user_id")->withTimestamps()->withPivot(['model_files', 'model_users', 'access']);
}
Вот код для создания связей, работает правильно:
$category->access()->syncWithPivotValues(["5", "7"], [
"model_files" => "file_category",
"model_users" => "user",
"access" => "disallow",
]);
А вот как получить данные ? Данный код не работает:
$accessUsers = $category->access()->wherePivot('access', '=', "disallow")->wherePivot('model_files', '=', "file_category")->wherePivot('model_users', '=', "user")->get();