Laravelで追加したスコープ(addGlobalScope)を外す方法

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