Laravel 5.8中的whereHasMorph方法是用于在多态关联关系中进行查询的方法。它允许我们根据多态关联关系的类型和ID来过滤查询结果。
然而,在Laravel 5.8中,whereHasMorph方法不支持使用“点”语法。这意味着我们不能在关联关系的多态类型上使用“点”语法来指定关联关系的属性或方法。
例如,假设我们有一个多态关联关系,其中一个模型是Post,另一个模型是Comment。我们想要查询所有具有特定标签的帖子和评论。在Laravel 5.8中,我们可以使用以下代码来实现:
$tag = Tag::find(1);
$posts = Post::whereHasMorph('taggable', [Post::class, Comment::class], function ($query) use ($tag) {
$query->where('tags.id', $tag->id);
})->get();
然而,如果我们尝试使用“点”语法来指定关联关系的属性或方法,例如tags.name
,则会导致错误。
为了解决这个问题,我们可以使用闭包来手动连接关联表,并在闭包中进行查询。以下是一个示例:
$tag = Tag::find(1);
$posts = Post::whereHasMorph('taggable', [Post::class, Comment::class], function ($query) use ($tag) {
$query->whereHas('tags', function ($query) use ($tag) {
$query->where('tags.name', $tag->name);
});
})->get();
在这个示例中,我们使用了闭包来手动连接tags表,并在闭包中进行了查询。这样就可以使用“点”语法来指定关联关系的属性或方法。
总结:Laravel 5.8中的whereHasMorph方法不支持使用“点”语法来指定关联关系的属性或方法。为了解决这个问题,我们可以使用闭包来手动连接关联表,并在闭包中进行查询。
推荐的腾讯云相关产品:腾讯云云服务器(https://cloud.tencent.com/product/cvm)和腾讯云数据库MySQL版(https://cloud.tencent.com/product/cdb_mysql)可以满足Laravel应用的部署和数据库存储需求。
领取专属 10元无门槛券
手把手带您无忧上云