LoginSignup
8
6

More than 5 years have passed since last update.

Laravel Builder Scope 使い方

Last updated at Posted at 2017-08-24

まず、Laravel Builderの使い方

function(Builder $builder) {
            //Builderの使い方、ここ、Builderがナイトwhereが使えない
            //whereはclass Builderのメソッドだから
           $builder->where('user_id', '1');
}

Scopeの使い方 where何回も繰り返すことができる

// User Modelでscopeを作る、メソードscope書き方決まっている。
namespace App;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public function scopePopular($query)
    {
        return $query->where('votes', '>', 100);
    }

    public function scopeActive($query)
    {
        return $query->where('active', 1);
    }
}

//確認、使う
$users = User::popular()->active()->get();
//メソード渡すことも可能!
public function scopeOfType($query, $type)
   {
        return $query->where('type', $type);
   }

//実際に使ってみる
$users = User::ofType('vip')->get();

Model Post(記事)の例: VIPユーザーだけ記事見れる,GlobalScope

class Post extends Model
{
    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope('user', function(Builder $builder) {
            // vipユーザーだけ記事見れる
           $builder->where('user_stage', 'vip');
        });
    }
}

イベント

creating 作成するとき
created 作成したとき
updating 更新するとき
updated 更新したとき
saving 保存するとき(制作でも、更新でも)
saved 保存したとき(制作でも、更新でも)
deleting 削除するとき
deleted 削除したとき
restoring ソフト削除をレストアするとき
restored ソフト削除をレストアしたとき

class Order extends Model
{
    protected static function boot()
    {
        parent::boot();

        static::creating(function ($order) { // 作成するときに
            // falseをリターンしたら作成されません
            return $order->isValid(); 
        });

        static::created(function ($order) { // 作成したときに
            $order->sendOrderSubmittedEmail();
        });
    }
}

参考:http://qiita.com/henriquebremenkanp/items/e21de43e4b9079265d7f

8
6
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
8
6