2017-07-27 76 views
1

我有問題與我的查詢。我有4個用戶,潛在客戶,潛在客戶,項目。所有這些都有關聯Laravel查詢主鍵結果。

oneToMany relation喜歡用戶有很多前景,潛在客戶有很多潛在客戶,潛在客戶有很多項目。我的項目是我需要數據的表格。項目表如下所示。

$table->increments('id'); 
      $table->integer('lead_id'); 
      $table->string('sales_phase',11); // the sale_phase has 4 category only A,B,C,D 
      $table->string('product_name',32); 
      $table->decimal('price',8,2)->default(0.00); 
      $table->integer('qty'); 
      $table->integer('probability')->default(0); 
      $table->decimal('forcast',8,2)->default(0.00); 
      $table->string('note')->nullable(); 
      $table->timestamps(); 

我需要通過sales_phase得到forcast和group的總和。我需要2個結果。

1. sales_phase獲取FORCAST組之和衛生組織lead_id是活動的(信息表有效= 1)

2.獲取FORCAST組由sales_phase用於用戶的總和。 (用戶>潛在客戶>潛在客戶>項目)

對於第一個結果,我可以通過以下查詢來製作數據透視表。但我怎麼能通過參數在哪裏條件,哪裏鉛活躍。並得到用戶的結果;

$data = DB::table('items') 
       ->select(DB::raw("lead_id, 
        SUM(CASE WHEN sales_phase='New Lead' THEN forcast ELSE 0 END) AS NEW_LEAD, SUM(CASE  

    WHEN sales_phase='Contact' THEN forcast ELSE 0 END) AS CONTACT, SUM(CASE WHEN 

    sales_phase='Quotation' THEN forcast ELSE 0 END) AS QUOTATION, SUM(CASE WHEN  

    sales_phase='Order' THEN forcast ELSE 0 END) AS ORDERS 
        ")) 
        ->groupBy('lead_id') 
        ->get(); 

請幫忙。我在sql中不夠好。

回答

0

嘗試使用你的關係雄辯的方式。

問題1

$sum = Item::->with(['leads' => function($query) { 
     $query->where('lead', 'active') 
    }]) 
    ->groupBy('sales_phase') 
    ->selectRaw('SUM(forcast) AS sum, sales_phase') 
    ->pluck('sum', 'sales_phase'); 

問題2,對於用戶ID X

$userSum = User::where('id', X) 
    ->with(['prospects.leads' => function($query) { 
     $query->where('lead', 'active') 
    }]) 
    ->with(['prospects.leads.items' => function($query) { 
     $query->groupBy('sales_phase') 
     ->selectRaw('SUM(forcast) AS sum, sales_phase') 
    }])->get(); 

一些相關Laravel文檔:

+0

嗨,謝謝,我想我接近解決方案。對於第一個答案,我可以使用一個工作正常的單個線索。但是如果我想要所有活動導線的所有總和,我需要將參數傳遞給導致表active = 1;第二個不起作用。 – Taslim

+0

對不起,我一定是第一次誤讀你的問題。我已經更新了我的答案。 –

+0

與不工作,但我使用whereHas,現在它工作。謝謝。 – Taslim