LoginSignup
5
3

More than 5 years have passed since last update.

addGlobalScopeを使って分かりやすいソースコードを書きましょう

Posted at
Members
 | ID | name  | role   | email 
 |-------------------------
 | 1  | 一郎  | admin  | itiro@test.com
 | 2  | 次郎  | guest  | jirou@test.com
 | 3  | 三郎  | admin  | saburou@test.com

以前の書き方:

old_version.php
$admin = Memeber::where('role', 'admin')->get();
$guest = Memeber::where('role', 'guest')->get();

現在の書き方:

new_version.php
$admin = Admin::all();
$guest = Guest::all();
App\Member.php
class Member extends Model
{
    protected $table = 'members';
}
App\Admin.php

use App\Member;
use Illuminate\Database\Eloquent\Builder;

class Admin extends Member
{
    protected static function boot()
    {
        parent::boot();
        static::addGlobalScope('role_admin', function(Builder $builder) {
            $builder->where('role', 'admin');
        });
    }
}
App\Guest.php

use App\Member;
use Illuminate\Database\Eloquent\Builder;

class Guest extends Member
{
    protected static function boot()
    {
        parent::boot();
        static::addGlobalScope('role_guest', function(Builder $builder) {
            $builder->where('role', 'guest');
        });
    }
}

以上です。

感想

グローバルスコープを利用して、明示的なモデル名を使えば、ソースコードがもっと分かりやすくなります。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3