2017-05-02 11 views
0

は、私は次のようになりましたユーザーのための2つのロール:オーナー&ガーデナーLaravel:belongsToMany関係の結合カウントクエリを書くには?</p> <ul> <li>ユーザー、役割、ROLE_USERピボットテーブルとbelongsToMany 関係</li> <li>ユーザー、場所で、location_userピボットテーブルと</li> </ul> <p>がありますbelongsToManyの関係で:

ロケーションには 'gardeners_max'フィールドがあります

モデルの場所に

:今

protected $appends = ['is_full']; 

public function getIsFullAttribute() 
{ 
    return $this->attributes['name'] = $this->remainingGardeners() <= 0; 
} 

public function countGardeners() 
{ 
    return $this->gardeners()->count(); 
} 

public function remainingGardeners() 
{ 
    return $this->gardeners_max - $this->countGardeners(); 
} 

、それをやって:

Location::all(); 

は私がそれを得る:クールです

[ 
{ 
    name: 'LocationA', 
    gardeners_max: 3, 
    owners: [...], 
    garderners: [...] 
    ... 
    is_full: false 
} 
] 

を。しかし、追加された属性に対してWHERE句を実行することはできません。

Location::where('is_full',true)->get() // Unknown column 'is_full' in 'where clause' 

ので、私はis_full

にwhere句を行うことができますし、私は方法を見つけることができませんので、参加するクエリを作成したいと思います。どんな助けでも大歓迎です!

重要:

私は結果を得るために、フィルタ()メソッドを知っているが、私はここに

答えて

0

あなたは、データベースからオブジェクトをロードした後Collectionを操作しようとすることができ、単一のscopeQueryを実行する必要があります。

Location::get()->where('is_full', true)->all(); 

(あなたはない、それはそれ以外の場合は確かに動作し、その後、allを最初getを使用する必要があります)

最適化されているかどうかは不明です。

+0

のおかげのようなすべての場所を取得しますが、私は本当に(と理解)する必要があります私はちょうど編集したとして、この

public function scopeFull(Builder $query) { return $query->where('is_full', true); } 

のようなあなたの場所のモデルにスコープを作ることができますどのように結合クエリを書く – sebap

0

あなたは今、あなたはちょうどこの

Location::full()->get(); 
+0

ありがとうが、それは、追加された属性がWHERE句のアカウントで取られていないので、動作しません...だから私はここに結合クエリが必要と思う – sebap

関連する問題