2017-02-08 17 views
0

私はLaravel 5.2のコントローラに入っていて、注文アイテムのようなものに変換するinvoice_itemsの雄弁なコレクションを反復しようとしています。したがって、請求書は注文として機能し、注文アイテム(invoice_item)になり、請求書アイテムにはすべて注文された商品(商品)が表示されます。Laravel 5.2まあまあのforeachループ

は、ここで私が持っているものです。

$id = $value; //from param 
$invoice = Invoice::where('id', $id)->get(); 
$invoice_items = Invoice_item::all()->where('invoice_id', $invoice[0]->id); 

$contact = Contact::where('id', $invoice[0]->contact_id)->get(); 

foreach($invoice_items as $item) { 
    $products = Product::all()->where('id', $item->product_id); 
} 

は、私は、この特定の場合には2、異なる製品である必要があり、(請求書明細を経由して)その特定の請求書から製品のすべてを引くしようとしています。

何が起こっているのですか。ループを繰り返しながら同じ製品を2回追加するのですが、各製品を1回追加する必要があります。ここで私の論理は間違っていますか?それとも、私の関係をもう一度見なければならないのですか?

+0

'where()'を使うときは、 'all()'の代わりに 'get()'を試してみてください。 – aynber

+0

get()は残念なことに同じ出力を返します。しかし、迅速な対応をありがとう! –

答えて

1
にクエリを変更し

:簡単な方法はInvoiceItemsモデルにアイテム関係を追加することであってもよい

$invoice = Invoice::where('id', $id)->get(); 
$invoice_items = Invoice_item::where('invoice_id', $invoice[0]->id)->get(); 

$contact = Contact::where('id', $invoice[0]->contact_id)->get(); 

foreach($invoice_items as $item) { 
    $products = Product::where('id', $item->product_id)->get(); 
} 

。例:

public function items() 
{ 
    $this->hasOne('Items'); 
} 

次に、あなたが使用してInvoice_itemからすべてのアイテムを取得することができます。

return $invoice_items->items; 

をあなたも試すことができます。

$invoice = Invoice::where('id', $id)->get(); 
$invoice_items = Invoice_item::where('invoice_id', $invoice[0]->id)->get()->lists('product_id'); 

$contact = Contact::where('id', $invoice[0]->contact_id)->get(); 

$products = Product::whereIn('id', $invoice_items)->get(); 

うまくいけば、$productsは、コレクションが含まれていますその請求書の製品のforeachループの必要はありません。

+0

フィードバックをいただきありがとうございます - 私はそれが動作するかどうかを確認する機会を得ると、他の関係を試してみるつもりです。ただし、foreachループ内でクエリを変更しても機能しません。実際に何が起こっているのかは、クエリがループ内の1つの製品のみを取得していることです。したがって、$ productsオブジェクトは、最後の製品のみを保持するか、2回目の繰り返しから取得した製品のみを保持します。私は、それを配列にプッシュすることだけが論理的なことだと思います。私は、単純にするために、オブジェクトと継続して作業したいと思っていました。 –

+1

私はforeachループを必要とせずに試してみることができる別の例で私の答えを更新しました。それがどうなるか教えてください。 –

+0

それは完璧に機能しました!私は一時的なinvoice_items変数を作成しました。なぜなら、ビュー内のこれらのオブジェクトへの完全なアクセスが必要だったからです。しかし、今のtempでは - > lists()メソッドを使っていました。わーい!配列の必要はありません。再度、感謝します! –

関連する問題