sql - Laravel Eloquent ->take(5) 如果结果较少,则不起作用
问题描述
目前在我需要制作列表的网站上工作,但在主页上我想显示列表的较小版本,最多包含 5 个项目,所以通常这会起作用。
$items = collect(DB::select('EXEC [List] ?',[
Carbon::now()->year
])->take(5));
但是现在自从它的新网站它没有超过5条记录,并且每年检索到的记录也将少于5条。尝试使用limit(5),但这似乎也不起作用所以没有你们中的一个人对此有解决方案吗?
如果某些事情不完全清楚,请生病尝试更好地解释它。
解决方案
您似乎在数组上使用此函数。尝试分两步进行。
第一:获取收藏。
第二:使用它。
//$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();
这应该准备一个成本较低的数据库调用,因为您没有选择所有行。
推荐阅读
- css - 页面的导航栏隐藏在幻灯片动画下。如何防止这种情况?我想在顶部单独显示导航栏,动画照常进行
- c# - 如何增加由 . 分隔的字符串值编号(即 1.2.3 == 1.2.4)
- extjs - extjs 问题将 extraParams 发送到restapi
- python - 如何保存图像阅读和代码训练结果?
- asp.net - 防止数据从数据库重新加载到 from
- javascript - 我正在尝试开玩笑地对查询进行“压力测试”-但我无法绕过自动 5000 毫秒超时
- excel - 我自动将单元格乘以一个值的代码不断崩溃
- ios - 在带 Xcode 的设备上运行与在不带 Xcode 的设备上运行的行为差异
- ios - iOS 蓝牙无法通过自定义键盘扩展工作
- javascript - 如何检测浏览器后退按钮被禁用