質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

718閲覧

Laravel 5.6 で開発者権限を設定したい

waiemu

総合スコア14

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/03/05 09:19

Laravel 5.6でアプリケーション開発を行っています。
■目的
アプリケーション内で通常のユーザーとは別に開発者権限を持たせて、ファサードで呼び出す際、自動的に除外する仕様にしたい。
usersテーブル

idnameagerolesuper
1一郎3011
2次郎291null
3三郎282null

上記は検討段階なのですが、Userのデータベースカラムに「super」を設置し、任意の値を入力。
Userモデル内で入力値を参照し、除外設定したいと思っています。

そしてsuperに値が入っているユーザーはログインもできるし、通常のユーザーと何ら変わりのない操作ができるが、例えばユーザー一覧などを表示する際には出てきてほしくない。

User::whereNotIn('users.super', [1])->get();

とすれば、解決しますが、この記述を毎回書くのが面倒なため、モデル内で操作したいと思っています。

■質問
・Laravel ソフトデリート
https://readouble.com/laravel/5.6/ja/eloquent.html#soft-deleting

のような機能かと思いますが、どのように設定すれば実現できるでしょうか。

・他に実装方法がありましたら、ご教授いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

EloquentのScopesを探しているんでしょうか?

superのnullを除き、$table->boolean('super')->defaults(0)にして、0/1でハンドリングした方がいいかもしれません。

php

1class User extends Model 2{ 3 public function scopeSuper($query) 4 { 5 $query->where('super', true); 6 } 7 8 public function scopeNotSuper($query) 9 { 10 $query->where('super', false); 11 } 12} 13 14class SuperUser extends User 15{ 16 public $table = 'user'; 17 18 protected static function boot() 19 { 20 parent::boot(); 21 22 static::addGlobalScope('super', function ($builder) { 23 $builder->super(); 24 }); 25 } 26} 27 28class NormalUser extends User 29{ 30 public $table = 'user'; 31 32 protected static function boot() 33 { 34 parent::boot(); 35 36 static::addGlobalScope('not-super', function ($builder) { 37 $builder->notSuper(); 38 }); 39 } 40}

そうしたらコントローラー内に

php

1public function index() 2{ 3 return NormalUser::all(); // super着いていないユーザー一覧、それとも・・・ 4 return SuperUser::all(); // super着いているユーザー一覧、それとも・・・ 5 return User::all(); // ユーザー一覧 6} 7 8// super着いているユーザーならModelNotFoundExceptionが投げられて、404になる。 9public function show(NormalUser $user) 10{ 11 return $user; 12}

投稿2019/03/06 05:07

編集2019/03/06 05:08
Bremenkanp

総合スコア205

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

waiemu

2019/03/08 01:29

ありがとうございます。 ドキュメントにもばっちり載っていましたね…。お手数をおかけしました。
Bremenkanp

2019/03/08 05:15

解決できてよかったです!(*´ω`*)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問