Php 拉威尔有很多日期

Php 拉威尔有很多日期,php,sql,laravel,eloquent,Php,Sql,Laravel,Eloquent,我有一些模型,可以通过用户获得视图数。我已经建立了这样的模型: public function views() { return $this->hasManyThrough('App\View', 'App\User'); } public function barCharts(Request $request){ $modelName = 'App\\'.$request['option']; $model = new $modelName; foreac

我有一些模型,可以通过用户获得视图数。我已经建立了这样的模型:

public function views()
{
  return $this->hasManyThrough('App\View', 'App\User');
}
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);
  }
$modelViews[$val->name] = $val->views->whereBetween('created_at', [$from, $to])->count();
在我的控制器中,我向图表发送json数据,每个模型对象如下:

public function views()
{
  return $this->hasManyThrough('App\View', 'App\User');
}
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);
  }
$modelViews[$val->name] = $val->views->whereBetween('created_at', [$from, $to])->count();
例如,我的链模型在DB中有3个链,通过这个函数我可以得到每个链的视图数。 这一切正常,但现在我需要获取数据,时间间隔是从
$from=$request['from']获取的$to=$request['to']

所以,基本上,我需要的是这样的东西:

public function views()
{
  return $this->hasManyThrough('App\View', 'App\User');
}
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);
  }
$modelViews[$val->name] = $val->views->whereBetween('created_at', [$from, $to])->count();
我想知道是否有任何优雅的解决方案,以及如何去做,否则我将不得不使用一些sql查询

更新代码

我还必须在whereBetween子句中添加一个表,因为它给了我一个错误:

SQLSTATE[23000]:完整性约束冲突:1052列 where子句中的“created_at”不明确

这就是我最终的工作方式:

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

您的代码中只有一个小的输入错误(或误解)。您缺少
$val->views
之后的()

$modelViews[$val->name] = $val->views()->whereBetween('created_at', [$from, $to])->count();
调用->视图时,Laravel已从数据库中获取数据。当您调用->视图()时,会得到一个查询对象,您可以进一步修改它

您还必须确保日期的格式如下:YYYY-mm-dd HH:mm:ss,以便它们与在列中创建的_匹配