2017-07-20 8 views

答えて

1

が、これらはGlobal Query Scopesと呼ばれている場所を雄弁を使用してレコードを除外することができます。

グローバルスコープの作成は簡単です。 Illuminate\Database\Eloquent\Scopeインターフェイスを実装するクラスを定義します。このインターフェイスでは、1つのメソッド、applyを実装する必要があります。必要に応じてapply方法は、クエリにwhere制約を追加する可能性があります。

<?php 

namespace App\Scopes; 

use Illuminate\Database\Eloquent\Scope; 
use Illuminate\Database\Eloquent\Model; 
use Illuminate\Database\Eloquent\Builder; 

class AgeScope implements Scope 
{ 
    /** 
    * Apply the scope to a given Eloquent query builder. 
    * 
    * @param \Illuminate\Database\Eloquent\Builder $builder 
    * @param \Illuminate\Database\Eloquent\Model $model 
    * @return void 
    */ 
    public function apply(Builder $builder, Model $model) 
    { 
     $builder->where('age', '>', 200); 
    } 
} 

をモデルにグローバルスコープを割り当てるには、与えられたモデルのbootメソッドをオーバーライドし、addGlobalScope方法を使用する必要があります

<?php 

namespace App; 

use App\Scopes\AgeScope; 
use Illuminate\Database\Eloquent\Model; 

class User extends Model 
{ 
    /** 
    * The "booting" method of the model. 
    * 
    * @return void 
    */ 
    protected static function boot() 
    { 
     parent::boot(); 

     static::addGlobalScope(new AgeScope); 
    } 
} 
+0

完璧!本当にありがとう! – MitchEff

0

あなただけの機能

$lists = List::where('is_abandoned',false); 
+0

laravelが提供するネイティブソフト削除機能を使用しない理由は何ですか? https://laravel.com/docs/5.4/eloquent#soft-deleting – derrysan7

+0

これは、手動で設定するまですべてのオブジェクトが放棄(隠されている)と思われるという奇妙なケースです。そのため、_quite_softDeletesではありません。 – MitchEff

0

はここに例を示します

Eloquent

class User extends Eloquent { 

    public function scopeAbandoned($query) 
    { 
     return $query->where('is_abandoned', '=', 1/*true*/); 
    } 

} 

内の関数を作成します。そして、単にこのようにそれを使用します。詳細な情報については

$approvedPosts = Post::abandoned()-><put_your_own_condition>; 

Eloquent Query Scopesをお読みください。 WHERE関数呼び出しが繰り返されません。それはうまくいくと思う。

+0

ああ、私はそれがかなり便利なので、私ができるならあなたをアップアップしたいと思います。 Cryodeが言ったように、私が言及していたものが「Global Query Scopes」だったことが分かります。 – MitchEff

+0

はい、私は同意します。 Cryodeソリューションは完璧でした。 – laktherock

関連する問題