У меня есть модели, для которых я получаю количество просмотров через пользователей. Я создал эти модели, как это: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();
}