首页 > 解决方案 > Laravel - 在某些情况下类似功能不起作用

问题描述

我是 Laravel 6 的新手,我对 where() 函数有疑问。

我有一个用户模型和一个文章模型,在我的用户模型中,我将关系设置为 hasMany(App\Article::class),这意味着用户可以拥有许多文章。假设用户 1 有几篇标题为“如何...”教程的文章。

在修补程序中,如果我这样做:

$user->articles()->where('title', 'like', '%how to%')->get();

它显示了所有带有“如何”字样的标题,但是如果我这样做:

$user->articles->where('title', 'like', '%how to%'); //but $user->articles->where('id', 2); works perfectly

它返回空白结果。为什么?

标签: phplaravellaravel-artisan

解决方案


那是因为您的第一个 where()$user->articles()->where('title', 'like', '%how to%')->get();构建了一个 SQL 查询(QueryBuilder https://laravel.com/docs/6.x/queries)。

你的第二个 where() 试图从一对一的关系中获取一个值。如果你想从多对多关系中获取一个值,你需要括号——你必须使用函数$user->articles()


推荐阅读