Laravel 4:如何在 where 子句中使用访问器
Posted
技术标签:
【中文标题】Laravel 4:如何在 where 子句中使用访问器【英文标题】:Laravel 4: How to use an Accessor in a where-clause 【发布时间】:2015-01-31 00:52:51 【问题描述】:是否可以在 Laravel 4 中使用 Accessor 进行比较,例如:
class User extends Eloquent
// define Accessor
public function getSpecialNameAttribute()
return 'Joda';
$User = User::where('gender','=','male')->where('specialName','=','Joda');
?
【问题讨论】:
【参考方案1】:是的,您可以使用它来过滤查询结果:
User
::where('gender','=','male')
->get()
->filter(function($item)
return $item->specialName === 'Luke';
);
(!) 请注意,过滤将在查询数据库之后应用,因此在大数据的情况下,此解决方案将出现性能问题。
有关更多详细信息,我已经为您搜索了this Collections tutorial。
另外我建议query scopes 可能有助于以最佳方式完成您的任务。
【讨论】:
是的,这就是我正在寻找的方式。就我而言,没有大数据,所以这就足够了。谢谢! 当我的集合以 json 形式返回时,过滤器会将我的集合变成一个对象。有没有办法告诉 filter 使它成为一个数组?【参考方案2】:不,你不能这样使用它。
使用时:
$user = User::where('gender','=','male')->where('specialName','=','Joda')->get();
您将尝试将数据库中的specialName
列与Joda
字符串进行比较。
您不能在这里使用访问器,因为访问器可能非常复杂,然后 Laravel 需要从数据库中的表中获取所有数据(例如 100000 条记录)并计算所有这些访问器的访问器,以便只为您获取您需要的记录(例如 1 条记录)。
访问器只能在有对象实例的情况下使用,查询数据库时不能使用。
【讨论】:
这可以用leftJoin
完成吗?如果可能的话,请你举个例子。以上是关于Laravel 4:如何在 where 子句中使用访问器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 switch 语句中使用 laravel 模型运行多个 Where 子句
如何在 Laravel 中 MySQL 查询的 where 子句中使用数组 [重复]