如何在laravel中计算和获取数据查询?

时间:2014-04-07 08:35:05

标签: php mysql laravel

如何合并这两个查询?

$data = DB::table('category_to_news')
      ->where('category_to_news.name', ucwords($category))
      ->remember(1440)
      ->count();

$data = DB::table('category_to_news')
      ->where('category_to_news.name', ucwords($category))
      ->remember(1440)
      ->get();

3 个答案:

答案 0 :(得分:2)

因此,据我所知,您只需要从表category_to_news获取所有记录,并且您想知道其中有多少条记录,对吧?

MySQL count是一个聚合函数,这意味着:它接受一组值,执行计算并返回单个值。如果将其放入名称查询中,则每个记录中都会得到相同的值。我不确定这是否与“优化”有关。

如上所述,您只需像往常一样运行查询:

$data = DB::table('category_to_news')
      ->where('name', ucwords($category))
      ->remember(1440)
      ->get(['title']);

$data现在属于Illuminate\Support\Collection类型,提供handy functions for collections,其中一个是count()不要与上面提到的聚合函数混淆 - 你和#39;再次使用PHP,而不是MySQL

所以$data->count()为你提供了集合中的项目数量(几乎就是类固醇上的数组),甚至没有点击数据库。

答案 1 :(得分:1)

你好DB类没有返回集合对象它给出错误“在数组上调用成员函数”但是雄辩的返回集合对象。对于上面的代码,我们可以使用collect helper函数使它成为集合实例,然后使用count和其他集合方法https://laravel.com/docs/5.1/collections#available-methods

$data = DB::table('category_to_news')
      ->where('name', ucwords($category))
      ->remember(1440)
      ->get();
$data = collect($data);

$data->count();

答案 2 :(得分:0)

你我用它来获取它:

$data = DB::table('category_to_news')
          ->where('name', ucwords($category))
          ->remember(1440)
          ->get();

要计算,请尝试:

$data->count();

为什么您使用DB::table(...),而不是像这样使用Eloquent模型,在models目录中创建模型:

class CategoryToNews extends Eloquent {
    protected $table = 'category_to_news';
    protected $primaryKey = 'id'; // if different than id then change it here
}

现在,您可以轻松使用:

$data = CategoryToNews::whereName(ucwords($category))->get();

要获得计数,请使用:

$data->count();