Laravel 5.8.27 中查询多态关系的新功能
发布时间 作者 Paul Redmond
Laravel 团队发布了 v5.8.27,其中包含一个 whereHasMorph()
方法,用于处理多态 Eloquent 关系 (MorphTo
)。
新的 whereHasMorph()
和相关方法使得可以使用以下代码查询多态关系
Comment::whereHasMorph('commentable', [Post::class, Video::class], function ($query) { $query->where('title', 'foo');})->get();
这将产生类似以下的查询
select * from "comments"where ( ( "commentable_type" = 'App\Post' and exists ( select * from "posts" where "comments"."commentable_id" = "posts"."id" and "title" = 'foo' ) ) or ( "commentable_type" = 'App\Video' and exists ( select * from "videos" where "comments"."commentable_id" = "videos"."id" and "title" = 'foo' ) ))
此处显示的所有示例都来自拉取请求 (#28928) 描述,其中对它进行了更详细的解释,因此请查看完整说明
通过为每种类型创建一个临时的
BelongsTo
关系,并允许关系实例作为has()
的第一个参数,我们可以重用大多数现有代码。
类型作为闭包的第二个参数传递,这简化了具有不同约束的查询
Comment::whereHasMorph('commentable', [Post::class, Video::class], function ($query, $type) { if ($type === Post::class) { // $query-> } if ($type === Video::class) { // $query-> }});
最后,提供通配符作为第二个参数将使 Laravel 从数据库中获取可能的类型
Comment::whereHasMorph('commentable', '*', function ($query) { $query->where('title', 'foo');})->get();
接下来,混合资产 URL 可以通过 MIX_ASSET_URL
环境变量进行配置。
接下来,您可以使用 setDriver()
方法设置 RedisManager
的默认驱动程序。
您可以在下面查看完整的修复列表,以及 GitHub 上 5.8.26 和 5.8.27 之间的完整差异。Laravel 5.8 的完整发布说明可在 GitHub 的 5.8 变更日志 中找到。
v5.8.27
添加
- 使
mix
助手使用app.mix_url
配置 (#28952) - 添加
RedisManager::setDriver()
方法 (#28985) - 添加
whereHasMorph()
和相关方法,用于处理MorphTo
关系 (#28928)
修复
- 修复:将数据库字段更改为二进制文件包括
collation
(#28975) - 修复 jquery 组件加载的 app.stub (#29001)
- 修复
Str::ascii()
中希腊字母 theta 的等效项 (#28999)
更改
- 防止
TestResponse::dump()
和TestResponse::dumpHeaders()
方法结束脚本执行 (#28960) - 允许
TestResponse::dump()
和TestResponse::dumpHeaders()
方法链接 (#28967) - 允许
NotificationFake
接受自定义通道 (#28969) - 原子地替换服务清单的内容 (#28973)
- 将
serverVersion
数据库连接选项传递给 Doctrine DBAL 连接 (#28964, 1b55b28) - 在
Relation::getMorphedModel()
中用static::
替换self::
(#28974) - 为
SuspiciousOperationException
设置消息 (#29000) - 在发送后将 Mailgun 消息 ID 存储在标头中 (#28994)