Laravel 4 Eloquent 动态 Where 子句

Posted

技术标签:

【中文标题】Laravel 4 Eloquent 动态 Where 子句【英文标题】:Laravel 4 Eloquent Dynamic Where Clause 【发布时间】:2013-09-22 05:15:25 【问题描述】:

我最近了解了 Laravel 4 Eloquent 中的动态 where 子句(我认为这就是所谓的),这使得像 User::where('first_name', 'Jon')->get() 这样的 where 子句变得更好 User::whereFirstName('Jon')->get()。这有多灵活??

例如,我可以执行以下操作吗

多列User::whereFirstNameOrLastName('Jon', 'Smith')->get(); 使用= 以外的运算符,例如>=LIKE

【问题讨论】:

【参考方案1】:

您可以使用Query Scope 来实现您所需要的。

一个简单的例子:

public function scopeFirstOrLastName($query, $first, $last)

    return $query->where('first_name', 'LIKE', '%' . $first . '%')
                 ->where('last_name', 'LIKE', '%' . $last . '%');

使用它:

$user->firstOrLastName('John', 'Doe')->get();

您可以随意命名,并且可以在其中使用任何运算符(或任何查询生成器操作)。

【讨论】:

这样你可以获得SQL注入。 嗨@vinsa,只要你使用 Laravel 的 QueryBuilder,你应该可以避免 SQL 注入。 Note: The Laravel query builder uses PDO parameter binding throughout to protect your application against SQL injection attacks. There is no need to clean strings being passed as bindings.More on Queries 是的,你是对的@JofryHS,这段代码通过PDO,应该是SQL注入保存。

以上是关于Laravel 4 Eloquent 动态 Where 子句的主要内容,如果未能解决你的问题,请参考以下文章

创建动态的 Eloquent 类 laravel

Laravel eloquent 如何动态创建关系?

Laravel Eloquent 支持 MariaDb 动态专栏

在使用 tinker CLI 时,Laravel 如何在 Eloquent 模型上查找和显示动态属性?

Laravel 4:Eloquent::find() 不起作用

Laravel 4,凌乱的 Eloquent 连接查询