我有可以通过用户查看视图的模型。我已经设置了这样的模型:
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);
}
例如,我的Chain模型在DB中有3个链,通过这个函数我得到每个链的视图数。
这一切都很好,但现在我需要得到那些数据,我将从$from = $request['from']; $to = $request['to'];
得到的时间间隔
所以,基本上,我需要的是这样的东西:
$modelViews[$val->name] = $val->views->whereBetween('created_at', [$from, $to])->count();
我想知道是否有任何优雅的解决方案以及如何解决这个问题,或者我将不得不使用一些SQL查询。
更新了代码
我还必须向whereBetween子句添加一个表,因为它给了我一个错误:
SQLSTATE [23000]:完整性约束违规:1052列 ' created_at' in where子句不明确
所以,这就是我最终的工作方式:
foreach($model->all() as $val){
$modelViews[$val->name] = $val->views()->whereBetween('views.created_at', [$from.' 00:00:00', $to.' 00:00:00'])->count();
}
答案 0 :(得分:1)
您的代码中只有一个小错字(或误解)。您在$val->views
之后缺少()
$modelViews[$val->name] = $val->views()->whereBetween('created_at', [$from, $to])->count();
当您致电时 - > gt;视图Laravel已从数据库中提取数据。当您调用 - > views()时,您将获得一个可以进一步修改的查询对象。
您还必须确保日期的格式如下:YYYY-mm-dd HH:mm:ss,以便它们与created_at列匹配。