Laravel 4.2静态函数不返回正确的值

时间:2015-09-06 18:10:08

标签: php mysql laravel laravel-4

我有一个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))确实会返回好的部分......那么,我该如何解决计数问题呢?

2 个答案:

答案 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()的位置。

然后,您将能够按预期使用MostVisitscount(),或者确实使用任何其他查询修改方法。