【问题标题】:Laravel 4.2 static function doesn't return the correct valuesLaravel 4.2 静态函数不返回正确的值
【发布时间】:2015-12-02 07:15:47
【问题描述】:

我有一个 laravel 4.2 应用程序,但我想显示一些统计信息...

所以我想展示最多的访问者等...

我知道了:

一个名为 Stats 的类,其中包含以下代码:

public static function MostVisits()
    {
        return Tracker::selectRaw('count(*), date')->groupBy('date')->orderBy('count(*)', 'desc')->first();
    }

这就像一个魅力,当我在我的 SQL 服务器中执行呈现的代码 (select count(*), date fromprotrackgroup bydateorder bycount(*)desc limit 1) 时,它会给出正确的值。

现在我想得到一切:

Stats::MostVisits()->count('*') 在我看来,但给了我该表中所有记录的计数...

但是日期date('d/m/Y', strtotime(Stats::MostVisits()->date)) 确实返回了好的部分...那么,我该如何解决计数问题?

【问题讨论】:

  • 通过使用 Stats::MostVisits()->count('*') 您明确告诉函数显示所有记录的计数。创建一个变量 $track=Tracker::selectRaw......... 并返回 $track ,然后简单地使用 MostVisits() 获取所有内容。
  • 所以不能用同样的函数来计算日期?
  • 或者我需要返回一个变量而不是查询?因为答案有点奇怪……
  • 在函数中返回变量 $track。MostVisits()->date 应该仍然有效,尝试使用 MostVisits() 获取所有内容。要获取特定查询,请使用 MostVisits->query
  • 我还是不明白,你能回答一下吗?

标签: php mysql laravel laravel-4


【解决方案1】:

您遇到的问题是因为您的查询末尾有->first()

通过添加->first(),您更改了MostVisits() 函数返回的内容。

在调用first() 之前,您有一个 Eloquent 查询对象。调用 count() 确实会按预期将查询更改为计数查询。

但是在调用first() 之后,你所拥有的不再是 Eloquent 查询对象。相反,它是 Tracker 的一个实例,其中包含从查询返回的第一条记录。对此调用 count() 将与您调用 Tracker::count() 一样,这将为您提供所有记录的计数。

解决方案是从您的MostVisits 方法中删除->first() 部分,并将其移至您调用MostVisits() 的位置。

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

【讨论】:

    【解决方案2】:

    通过添加一个 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
    

    这解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      相关资源
      最近更新 更多