2016-07-29 6 views
0

だから私はこれと一緒に& * ^%の時間を持っています。私はいくつかの掘り出し物をしたし、私は探しているものを達成する正しい(または可能な)方法を見つけることができないようです。追加機能とパラメータを渡しているLaravelモデル

バックストーリーのビット。私はnv3dグラフライブラリと直接統合するためにこのクエリを書いたので、なぜデータ構造が私にとって重要であるのか、そして日付を正しくスコープするのはなぜなのでしょうか。

最初に、「製品」のモデルクエリがあります。これにより、ID、タイトル、色のいい順番のリストが作成されます。

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) 

ステップ1:素晴らしい!

次は製品モデル内で、各製品に日付/値を追加しています。ここに問題があります。

どのように日付カウント、範囲などのようにこの二次クエリにパラメータを渡すことが可能ですか?

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

これまでのProduct ::クエリの値をその特定の関数に渡す方法はまだ分かりませんそれが私の本当の問題です。ありがとう、結構です! –

関連する問題