2016-05-20 16 views
1

私はユーザーからのビュー数を取得するモデルを持っています。私はこのようにそれらのモデルを設定している:私のコントローラでLaravel hasManyThrough whereBetween dates

public function views() 
{ 
    return $this->hasManyThrough('App\View', 'App\User'); 
} 

を私はこのようなものをモデルのオブジェクトごとに、チャートにJSONデータを送信しています:

public function barCharts(Request $request){ 
    $modelName = 'App\\'.$request['option']; 
    $model = new $modelName; 

    foreach($model->all() as $val){ 
     $modelViews[$val->name] = $val->views->count(); 
    } 

    return json_encode($modelViews); 
    } 

したがって、たとえば、私のチェーンモデルをDB内に3つの鎖があり、この関数を通じて各鎖のビュー数を取得します。

$modelViews[$val->name] = $val->views->whereBetween('created_at', [$from, $to])->count(); 

:すべて正常に動作しますが、今、私はそう$from = $request['from']; $to = $request['to'];

から取得する時間間隔のために、そのデータを取得する必要がありますされ は、基本的には、私が必要となることは、このようなものです私はそれに洗練された解決策があるかどうか、これについて行くか、または私はいくつかのSQLクエリを使用する必要がありますかと思います。

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'created_at' in where clause is ambiguous

だから、これはそれが私のために最後で働いていた方法です:

更新されたコード

は、私はそれは私にエラーを与えていたことからもwhereBetween句にテーブルを追加する必要がありました:

foreach($model->all() as $val){ 
     $modelViews[$val->name] = $val->views()->whereBetween('views.created_at', [$from.' 00:00:00', $to.' 00:00:00'])->count(); 
    } 

答えて

1

コードに小さな誤植(または誤解)があります。 >ビューLaravelは既にデータベースからデータを取り出す -

$modelViews[$val->name] = $val->views()->whereBetween('created_at', [$from, $to])->count(); 

呼び出している:あなたは()$val->views後に不足しています。 - > views()を呼び出すと、さらに変更できるクエリオブジェクトが取得されます。

また、日付がYYYY-mm-dd HH:mm:ssのようにフォーマットされていることを確認して、created_at列と一致させる必要があります。

関連する問題