首页 > 解决方案 > Laravel 在 where 子句静态方法中具有列名

问题描述

最近我刚刚意识到 Laravel 在使用驼峰式大小写加入 where 子句时会生成一个带有列名的静态方法

例子

$user = User::whereName('john')->first(); // added `name` as a column name

当将此代码调用到 SQL 时,它会生成

$user = User::whereName('john')->toSql();

//it returns
select * from `users` where `name` = ?

这确实给出了预期的结果,因为它返回了一个具有 name 的用户john

我搜索了 Laravel 文档,但找不到这个函数或它的定义位置。

我所需要的只是澄清这个方法是好的还是最好的,以便我可以继续使用它,并且知道该方法是如何在 Laravel 框架或任何其他方式中生成的

标签: laraveleloquentlaravel-query-builder

解决方案


这种方法是完全合法的,你没有很好的记录。在Query\Builder其中利用__call函数覆盖来生成功能,您可以在此处查看确切的功能。

魔术方法和__call功能的主题,如果它们变得更好,通常是有争议的。如果你使用IDE helper。它实际上会为您键入提示方法,从而减轻它所采用的一些神奇方法,并为您提供流畅的 IDE 体验。

我拥有的本地项目中生成的类型提示的示例。

* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User whereEmail($value)

因此,我不会担心这不是最好的方法。有很多方法可以做你正在做的事情,但这是正确的方法之一。


推荐阅读