2017-11-02 22 views
0

ピボットテーブルに格納されている広告申込情報を含むオーダーの表があります。Laravel Eloquentすべての行とそれぞれのピボットテーブルの行を取得します

すべての広告申込情報が正常に処理されると、その注文は「処理済み」としてマークされ、ページに表示する必要があります。

したがって、「処理済み」としてマークされたすべてのオーダーと、それぞれのオーダーに含まれる広告申込情報を取得したいと考えています。

私のクエリは次のようになります。

$orders = DB::table('order_product') 
     ->join('products', 'order_product.product_id', '=', 'products.product_id') 
     ->join('orders', 'order_product.order_id', '=', 'orders.order_id') 
     ->join('customers', 'orders.customer_id', '=', 'customers.customer_id') 
     ->where('order_product.variation_status', '=', 'dispatch') 
     ->where('orders.store', '!=', 'null') 
     ->groupBy('order_product.order_id') 
     ->get(); 

return response()->json($orders); 

私の考えはで結果を処理した後、グループされているすべてのピボットテーブルのアイテムを取得することはをORDER_IDが、これは、残念ながら動作しません。

Iは、以下の出力を受け取る: enter image description here

残念なことに変化プロパティのみの代わりに2つのうち、ピボットテーブルから1行項目を含みます。

誰かが私が間違っているかもしれないことについて助けてもらえますか?

UPDATEここ

は私のモデルは Order.php

ある
/** 
    * The products that belong to the Order. 
    */ 
    public function products() 
    { 
     return $this->belongsToMany('App\Product','order_product','order_id','product_id') 
      ->withPivot(['qty', 'variation', 'variation_status']) 
      ->withTimeStamps(); 
    } 

    /** 
    * The customer that belongs to the Order. 
    */ 
    public function customer() 
    { 
     return $this->belongsTo('App\Customer', 'customer_id'); 
    } 

Product.php

/** 
    * The orders that belong to the product. 
    */ 
    public function orders() 
    { 
     return $this->belongsToMany('App\Order') 
      ->withPivot(['qty', 'variation_status']) 
      ->withTimeStamps(); 
    } 
+0

私は、これは非常に簡単に作ることが雄弁をお勧めします。あなたは、使用されているすべてのモデル間の関係を教えてくれますか? –

+0

こんにちは@LarsMertens私は私のモデルから関連するメソッドを追加しました。これは役に立ちますか? –

+1

はい、私はすぐに解決できるかどうかわかりませんが、今考えています。私はいくつかの時間が残っているかどうか見ていきます。または他の誰かがクレジットを取ることができます:) –

答えて

0

私はこれが原因で、私は通常、すぐに正しいことを保証することはできません->withPivotでは動作しません。テスト環境はまだ実行されていないので、これはお母さんの頭の上からですent。しかし、これはあなたにこのユースケースをどう扱うかについての洞察を与えるかもしれません。


今、私たちが今やってきたもの

Order::with('customer', 'products')->get(); 

されるのは、顧客との順序を取得するには、この機能を拡張してみましょうし、製品ベース

Order::get(); 

としてオーダーで始まるのをしてみましょう上記の雄弁なクエリのあなたの条件を解決してください:

->where('order_product.variation_status', '=', 'dispatch') 
->where('orders.store', '!=', 'null') 

あなたは何ができるかを次のようになります。

Order::with(['products' => function($query){ 
    $query->where('variation_status', 'dispatch'); 
}, 'customer']) 
->where('store','!=','NULL') 
->get(); 
関連する問題