2016-07-29 20 views
0

所以我在這個時候有一個& * ^%的時間。我已經做了一些挖掘,並且我似乎無法找到正確的(或可能的)方法來完成我正在尋找的。帶追加功能和傳遞參數的Laravel模型

有點背景故事。我已經寫了這個查詢來直接與nv3d圖形庫集成,因此爲什麼數據結構對我來說如此重要以及正確地確定日期的範圍。

首先我們有一個「產品」的模型查詢,這創建了一個很好的有序列表,標題和顏色。

Product::whereCuId(auth()->user()->cu_id) 
     ->whereCategoryId($id) 
     ->orderBy('sort_order', 'ASC') 
     ->select('id as id','title AS key', 'color AS color') 
     ->get(); 

它給我以下。

{ 
"id": 1, 
"key": "Title 1", 
"color": "#ffbd13", 
} 
{ 
"id": 2, 
"key": "Title 2", 
"color": "#8f8f8f" 
} 
(etc) 

第一步:太棒了!

接下來,在產品模型中,我將日期/值附加到每個產品。這是問題存在的地方。

如何將參數傳遞給次要查詢,如日期計數,範圍等?

protected $appends = array('values'); 
    public function getValuesAttribute() { 
     return $values=Checkin::whereProductId($this->id) 
      ->groupBy('date') 
      ->orderBy('date', 'ASC') 
      ->whereRaw('Date(created_at) > CURDATE() - INTERVAL 21 day') 
      ->get(array(
       DB::raw('1000*UNIX_TIMESTAMP(Date(created_at)) as date'), 
       DB::raw('COUNT(id) as total') 
      )); 
    } 

現在很明顯,我可以使用這樣的事情這是目前在上面的查詢....

->whereRaw('Date(created_at) > CURDATE() - INTERVAL 21 day') 

但怎麼可能對我來說,通過從最初的控制器參數(即通話產品模型)轉換成模型中的子函數,並說...將上面的「21」設置爲我傳入的變量?

非常感謝大家的幫助!

這是數據格式的最終​​目標,因爲它目前存在(不能改變天的範圍)作爲例子。

{ 
"id": 1, 
"key": "Title 1", 
"color": "#ffbd13", 
"values": [ 
    { 
    "date": 1468047600000, 
    "total": 4 
    }, 
    { 
    "date": 1468134000000, 
    "total": 1 
    }, 
    { 
    "date": 1468220400000, 
    "total": 1 
    }, 
    { 
    "date": 1468306800000, 
    "total": 2 
    }] 
} 
{ 
"id": 2, 
"key": "Title 2", 
"color": "#8f8f8f" 
} 
(etc) 

回答

0

我想你正在尋找關閉。沒有測試它,但應該給你的想法:

$yourVar = 21; 
$values=Checkin::whereProductId($this->id) 
     ->groupBy('date') 
     ->orderBy('date', 'ASC') 
     ->where(function ($query) use ($yourVar) { 
      $query->whereRaw('Date(created_at) > CURDATE() - INTERVAL '.$yourVar.' day')); 
     }) 
     ->get(array(
      DB::raw('1000*UNIX_TIMESTAMP(Date(created_at)) as date'), 
      DB::raw('COUNT(id) as total') 
     )); 
+0

我仍然不明白如何我可以通過該值21(或任何值)從以前的產品::查詢通過該特定功能,這是我真正的問題。謝謝你! –