以前、LaravelでTraits(トレイト)を利用してスコープの追加(addGlobalScope())をご紹介した記事を覚えているでしょうか?
単純な会員制のCRUDなら良いのですが、自分自身が登録したものしか表示されないので、会員が作成したものを全体に公開するような場合は、データベースから取得する際に普段のクエリに1ワード加えます。
【Laravel】DB登録で必ずuser_idを入れ、検索は自動でuser_idを含ませる方法
例えば、データベースに登録する際、どのユーザーが登録したかを記録しておきたい場合、もしくは、登録したユーザーのみ閲覧・編集・削除を可能にしたい場合などには、...
目次
withoutGlobalScope()
実を言うと、以前の記事内で紹介していた参考サイトに書いてありました。
単純に私が忘れてただけですね…。
Eloquentに惚れちゃう便利な機能 - Qiita
1. アクセサでデータを作成DBに存在しないアトリビュートをJSONのレスポンスで吐き出しができます。ゲッターとセッターを使うのは元々可能ですけど、アクセサで作られるア...
スコープを外す場合は、以下のようにwithoutGlobalScope()
を追記します。
1 |
User::withoutGlobalScope('[追加したスコープ名]')->get(); |
例えば、このようにスコープ追加している場合は、
1 2 3 |
static::addGlobalScope('mine', function(Builder $builder) { $builder->where('user_id', auth()->id()); }); |
こうすることで、user_idを検索対象から外してデータを取得することができます。
1 |
User::withoutGlobalScopes('mine')->get(); |
ああ、便利なLaravel。
コメント