如何合并这两个查询?
$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();
答案 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();