是否可以在Laravel 4中使用Accessor进行比较,例如:
class User extends Eloquent {
// define Accessor
public function getSpecialNameAttribute()
{
return 'Joda';
}
}
$User = User::where('gender','=','male')->where('specialName','=','Joda');
答案 0 :(得分:8)
是的,您可以使用它来过滤查询结果:
User
::where('gender','=','male')
->get()
->filter(function($item) {
return $item->specialName === 'Luke';
});
(!)请注意,在查询数据库后将应用过滤,因此,如果数据量很大,此解决方案将出现性能问题。
有关详细信息,我用Google搜索了this Collections tutorial。
另外,我建议query scopes可能有助于以最佳方式完成您的任务。
答案 1 :(得分:0)
不,你不能这样使用它。
使用时:
$user = User::where('gender','=','male')->where('specialName','=','Joda')->get();
您将尝试将数据库中的specialName
列与Joda
字符串进行比较。
你不能在这里使用访问器,因为访问器可能非常复杂,然后Laravel需要从数据库中的表中获取所有数据(例如100000条记录)并计算所有数据的访问器以获取所需的记录(例如1条记录)。
只有拥有对象实例时才能使用访问者,在查询数据库时将无法使用访问者。