2016-11-07 23 views
2

私はこの問題を解決しています。私のコードは1、2、1、4、5は、1がどのようにそれを行うにはそれだけで1、2、4、5、私はそれを返す必要が一意のIDを返します。このLaravel 5.3 WhereInが一意の結果を返します

$arrayKeys = [1, 2, 1, 4, 5, 1]; 
    $products = \App\Product::whereIn('id', $arrayKeys) 
        ->select(['id', 'name', 'outright_price', 'discount', ]) 
        ->with('photo', 'colors') 
        ->get(); 

のように見えますか?私には分かりません。

+0

1,2,4,5を返すだけではどういう意味ですか?あなたはレコード1,2,4,5を意味しますか? – Birdy

+0

はい、データベースのレコードです。 – Rbex

+0

私はid1,2,4,5というレコードを持っていますが、1,2,1,4,5,1が必要です。私はwhereInではできないと思いますが、どうすればそのレコードを達成できますか?ありがとう。 – Rbex

答えて

4

ID = 1という行が1つしかないので、これは正常です。何らかの理由であなたはまだ[1, 2, 1, 4, 5, 1] IDの構造を持つコレクションを取得したい場合は、手動でcollect()merge()を使用してそれを構築する必要があります:

$arrayKeys = [1, 2, 1, 4, 5, 1]; 

$products = collect([]); 

$productData = \App\Product::whereIn('id', $arrayKeys) 
     ->select(['id', 'name', 'outright_price', 'discount']) 
     ->with('photo', 'colors') 
     ->get(); 

foreach ($arrayKeys as $key) { 
    $products = $products->merge($productData->where('id', $key)); 
} 

dd($products); 

私はそれをテストしてみた、それが動作します。

+3

私にそれを打つ!事実上同じ答えを入力していただけです! +1 – Birdy

+0

複数のクエリを作成しても問題ありません。 – Rbex

+1

@Rbex、複数の類似したクエリを作成しない場合は、より良い方法を見つけました(最初の亜種では18の代わりに読み込みが必要なため3になります)。コードを更新しました。このコードでは、データを取得してこのデータから新しいコレクションを手動で作成するクエリを1回だけ実行します。 –

関連する問題