首页 > 解决方案 > Laravel Eloquent ->take(5) 如果结果较少,则不起作用

问题描述

目前在我需要制作列表的网站上工作,但在主页上我想显示列表的较小版本,最多包含 5 个项目,所以通常这会起作用。

$items = collect(DB::select('EXEC [List] ?',[
                Carbon::now()->year
            ])->take(5));

但是现在自从它的新网站它没有超过5条记录,并且每年检索到的记录也将少于5条。尝试使用limit(5),但这似乎也不起作用所以没有你们中的一个人对此有解决方案吗?

如果某些事情不完全清楚,请生病尝试更好地解释它。

标签: sqllaraveleloquent

解决方案


您似乎在数组上使用此函数。尝试分两步进行。
第一:获取收藏。
第二:使用它。

//$items = collect(...) 
$items = $items->take(5);

编辑 您正在该阵列上使用它。内部括号关闭您的 DB::select() 调用!尝试:

 $items = collect(DB::select('EXEC [List] ?', [Carbon::now()->year]))
   ->take(5);  

编辑2:
正如apokryfos 已经提到的,随着数据库的增长,这个调用变得越来越昂贵。当您只需要这 5 个条目时,您可以尝试以下操作:

$items = DB::table('TABLENAME')
    ->select('*')
    //assuming you have a created_at col which can be handled as date.
    ->whereYear('created_at', '=', date('Y'))   
    ->limit(5)
    ->get();   

这应该准备一个成本较低的数据库调用,因为您没有选择所有行。


推荐阅读