2017-08-03 20 views
0

私はlaravelで雄弁なクエリをピボットテーブルの列でソートしようとしています。Laravelピボットテーブルの列で並べ替え

は、基本的に限り、製品がユーザによりお気に入りに追加されるように、ピボットテーブルに追加され、それは最初のお気に入りに追加したものを示し、そして残りのものべきです。私はブレードでforeachを使用しているので。

製品の表は、これらの列が含まれています

id, category, product_name, priority, status, created_at, updated_at 

ユーザーの表は、これらの列が含まれています

id, name, email, created_at, updated_at 

ユーザーモデルで、次で:

public function favorites() 
{ 
    return $this->belongsToMany(Products::class, 'favorites', 'user_id', 'product_id') 
       ->withTimeStamps(); 
} 

お気に入りの表は、これらの列が含まれています:

コントローラで
id, user_id, product_id, created_at, updated_at 

、雄弁なクエリは現在、次のとおりです。

$productinprogress = Products::all() 
    ->sortByDesc("priority") 
    ->where('status', 'inprogress'); 

私はこれに対処する方法としてだけで混乱しています。

あなたのお手伝いがありがとうございます。どうもありがとうございます。私はあなたが2つのクエリを作るべきだと思い

$productinprogress = Products::all() 
    ->where('status', 'inprogress') 
    ->sortByDesc("priority"); 

を、あなたは、あまりにも熱心ロードとロードのお気に入りを使用して効率的なソリューションが必要な場合は、使用コードに

$productinprogress = Products::all() 
    ->with('favorites') 
    ->where('status', 'inprogress') 
    ->sortByDesc("priority"); 

答えて

0

あなたは怒鳴るようなものを使用することができます重複した製品の読み込みを避けるために、お気に入りの製品の最初のもの、次のようなものがあります。

Products::all()->sortByDesc("priority")->where('status', 'inprogress')->whereNotIn('id', $favorite_products); 

とし、ブレードファイルでforeachを2つ、お気に入りを最初に、他を2つにします。存在しないと

+0

BadMethodCallException 方法。 – RSK

+0

データベース内に優先順位フィールドが表示されません。そこにある他のフィールドに優先順位を変更しようとしますか? –

+0

これは実際に使用可能です。したがって、優先フィールドが利用可能です。 – RSK

関連する問題