Laravel - like 函数在某些情况下不起作用

Laravel - where like function is not working in some cases

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

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

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

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

它显示了所有包含 "how to" 措辞的标题,但是如果我这样做:

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

它returns 空白结果。为什么?

因为你没有指定->get()方法

为了检索数据,您应该提供其中一种方法 ->first(), ->last(), ->find()

当您不想将任何条件限制到模型时,使用 ->all() 方法。

如果它不起作用,请参阅 link

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

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