laravel
Builder
GlobalScope

Laravel Builder Scope 使い方

More than 1 year has passed since last update.

まず、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