Laravel Eloquent-> take(5)如果结果较少则无法正常工作

时间:2018-10-11 08:51:32

标签: sql laravel eloquent

当前在我需要列出列表的网站上工作,但在首页上我想显示列表的较小版本,最多5个项目,因此通常可以正常工作。

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

但是,由于自从其新网站发布以来,它没有超过5条记录,而且每年新检索到的记录也将少于5条。也尝试使用limit(5),但这似乎并没有工作那么你们其中一个有解决方案吗?

如果某些东西不能完全清除,那就请生病,尝试更好地解释一下。

3 个答案:

答案 0 :(得分:1)

似乎您正在数组上使用此函数。尝试分两个步骤进行。
首先:获取收藏集。
第二:使用它。

//$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();   

这应该准备一个较便宜的数据库调用,因为您无需选择所有行。

答案 1 :(得分:0)

请检查一下 $item = collect(DB::table('item')->select('*')->take(5)->get()); 可能是您忘记在查询中添加->get()

答案 2 :(得分:0)

刚刚找到答案。我使用的查询是

collect(DB::select()->take());

但应该是

collect(DB::select())->take();

有时候我真的很讨厌像这样的小东西,总是忽略它们。