私のテーブルの1つに'is_abandoned'
ブール値があります。true
の場合は、softDeletesのようにモデルを自動的にすべてのクエリから除外したいと思います。Laravelのクエリ(softDeletなど)から自動的に除外しますか?
これを実現するモデルに設定できるものはありますか?多分ミューテーターに向かって傾いていますか?
私のテーブルの1つに'is_abandoned'
ブール値があります。true
の場合は、softDeletesのようにモデルを自動的にすべてのクエリから除外したいと思います。Laravelのクエリ(softDeletなど)から自動的に除外しますか?
これを実現するモデルに設定できるものはありますか?多分ミューテーターに向かって傾いていますか?
が、これらは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);
}
}
はここに例を示します
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関数呼び出しが繰り返されません。それはうまくいくと思う。
ああ、私はそれがかなり便利なので、私ができるならあなたをアップアップしたいと思います。 Cryodeが言ったように、私が言及していたものが「Global Query Scopes」だったことが分かります。 – MitchEff
はい、私は同意します。 Cryodeソリューションは完璧でした。 – laktherock
完璧!本当にありがとう! – MitchEff