我有一个laravel 4.2应用程序,但我想显示一些统计数据......
所以我想展示最多的访客等...
我明白了:
一个名为Stats
的类,其中包含以下代码:
public static function MostVisits()
{
return Tracker::selectRaw('count(*), date')->groupBy('date')->orderBy('count(*)', 'desc')->first();
}
当我在我的SQL服务器中执行呈现的代码(select count(*), date from
protrack group by
date order by
count(*)desc limit 1
)时,它就像魅力一样正确的价值观。
现在我想得到一切:
Stats::MostVisits()->count('*')
站在我的视野中,但是给了我该表中所有记录的计数......
但是日期date('d/m/Y', strtotime(Stats::MostVisits()->date))
确实会返回好的部分......那么,我该如何解决计数问题呢?
答案 0 :(得分:0)
通过添加foreach,我能够解决它。
所以控制器方法现在是:
public static function CountMostVisits()
{
$json = Tracker::selectRaw('count(*)')->groupBy('date')->orderBy('count(*)', 'desc')/*->remember(1440)*/->first();
$array = json_decode($json, true);
return $array;
}
如您所见,它返回json,需要解码。
然后是观点:
@foreach(Stats::CountMostVisits() as $stat)
{{ $stat }}, op {{ date('d/m/Y', strtotime(Stats::MostVisits()->date)) }}.</p>
@endforeach
这解决了我的问题。
答案 1 :(得分:0)
您遇到的问题是因为查询结尾有->first()
。
通过添加->first()
,您已更改了MostVisits()
函数返回的内容。
在调用first()
之前,您有一个Eloquent查询对象。在其上调用count()
确实会将查询更改为预期的计数查询。
但是在调用first()
之后,你所拥有的不再是一个Eloquent查询对象。相反,它是包含查询返回的第一条记录的Tracker
实例。在其上调用count()
将会像调用Tracker::count()
一样,它将为您提供所有记录的计数。
解决方案是从->first()
方法移除MostVisits
部分,然后将其移至您调用MostVisits()
的位置。
然后,您将能够按预期使用MostVisits
和count()
,或者确实使用任何其他查询修改方法。