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


laravel-withoutglobalscope

以前、LaravelTraitsトレイト)を利用してスコープの追加(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




コメント

このブログの人気の投稿

Linuxでファイルの改行コードLF⇔CRLFを変換する方法

RHEL 7でスタティック(静的)ルートを追加する4つの方法

SQLPlusでのOracleリモート接続とSQLファイルを実行する方法