laravel-5 - 如何使用 Eloquent 范围获取最后一条记录?
问题描述
我有一个Posts
结构如下的表:
现在我正在尝试获取最新的帖子,这显然是id = 2
.
我的主题页面中有这个posts.htm
:
[builderList postLatest]
modelClass = "Me\Articles\Models\Posts"
scope = "scopeLatest"
scopeValue = "{{ :scope }}"
displayColumn = "title"
noRecordsMessage = "No records found"
detailsPage = "-"
detailsUrlParameter = "slug"
pageNumber = "{{ :page }}"
在我的模型中,Posts
我有:
public function scopeLatest($query)
{
return $query->orderBy('created_at','desc')->first();
}
但这一个正在返回两个记录。我也尝试过使用latest()
return $query->latest();
而这个给了我错误:
Maximum function nesting level of '1000' reached, aborting!
甚至尝试传递参数,latest('created_at')
但得到了同样的错误。
尝试倾倒dd($query->orderBy('created_at','desc')->first()->toSql())
并得到select * from posts where posts.deleted_at is null
- 为什么
first()
不限制为 1 条记录? - 为什么
latest()
扔我Maximum error
?这个版本是特定的错误吗?似乎我找不到与之相关的文档。我有 Laravel 5.5.48。
我现在不确定我可以使用什么。也许我在这里做错了什么。我只需要获取最新的帖子。
解决方案
您的问题的解决方案是使用->take(1)
方法。还有更多适用于查询的方法,但这里列出了可以在集合实例上运行的可用方法。我相信 Builder 期望范围返回一个 query {[a collection of models]}
。我花了一些时间进行测试,在我看来这可能只是 Builder Plugin 构造中的一个缺陷。
现在,在你看下面我的研究之前。我想说你应该学习构建自己的组件,就像 Hardik 在评论中建议的那样。希望这一切都有帮助。
所以这是我的插件范围:
public function scopeFilterTypes($query) {
return $query->whereNotIn('slug', [
'range',
'close',
'all',
'single',
'three',
'five',
'self'
])->first();
}
这是我的后端表单的图片,它正确地只看到关系中的一个项目(这就是我使用范围的原因):
现在看看我的构建器组件的这张图片,你可以看到它甚至忽略了我->whereNotIn([])
在查询中的方法:
为了证明我对构建器组件中这个缺陷的发现,我做了一个find($id)
方法,它会返回一个模型实例而不是模型的集合。使用该find($id)
方法还可以在后端表单中为我提供正确的结果,但在 Builder 列表中显示了所有不正确的记录。
但是,当我将范围更改为->take(1)
:
public function scopeFilterTypes($query) {
return $query->whereNotIn('slug', [
'range',
'close',
'all',
'single',
'three',
'five',
'self'
])->orderBy('created_at','desc')->take(1);
}
我从构建器列表中得到这个:
推荐阅读
- amazon-web-services - 你能指导我有关专用 AWS 的信息吗?
- python - 让 dev_appserver.py 监听变化
- python-3.x - python中列表理解输出的问题
- ubuntu - udev 规则问题 - 在 ubuntu 20.04 上安装 STMicroelectronics STlink 工具
- c++ - 如何提高大整数的乘法效率?
- python-3.x - 嵌入狙击消息显示用户ID而不是用户名discord bot python
- python - 在 Python 中将 OpenCV 图像保存到外部服务器路径中
- javascript - ImportXML - Javascript?导入的内容为空
- javascript - 预约提醒 Nodemailer node-cron MongoDB
- bash - 在 bash 脚本中使用 if 语句检查包是否已安装时遇到问题