2016-05-20 4 views
1

У меня есть модели, для которых я получаю количество просмотров через пользователей. Я создал эти модели, как это:Laravel hasManyThrough whereBetween дат

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); 
    } 

Так, например, моя Цепная модели имеет 3 цепочки в БД, и через эту функцию я получаю количество просмотров для каждой цепочки. Это работает все отлично, но теперь мне нужно получить эти данные, в течение интервала времени, который я получаю от $from = $request['from']; $to = $request['to'];

Итак, в основном, то, что мне нужно что-то вроде этого:

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

Мне интересно, есть ли там какое-нибудь изящное решение и как это сделать, или мне придется использовать какой-то sql-запрос.

Обновленный код

Я должен был также добавить таблицу в whereBetween пункта, поскольку он дает мне ошибку:

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

Итак, это то, как он работал в конце концов для меня:

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

ответ

1

У вас просто небольшая опечатка (или неправильное представление) в коде. У вас не хватает() после того, как $val->views:

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

Когда вы звоните -> Виды Laravel уже извлекает данные из базы данных. Когда вы вызываете -> views(), вы получаете объект запроса, который вы можете изменить дальше.

Вам также необходимо убедиться, что ваши даты отформатированы примерно так: YYYY-mm-dd HH: mm: ss, чтобы они соответствовали столбцу created_at.

Смежные вопросы