Laravel 4:如何在where子句中使用Accessor

时间:2014-12-02 17:14:07

标签: php database laravel-4 eloquent accessor

是否可以在Laravel 4中使用Accessor进行比较,例如:

class User extends Eloquent {

   // define Accessor
   public function getSpecialNameAttribute()
   {
       return 'Joda';
   }

}

$User = User::where('gender','=','male')->where('specialName','=','Joda');

2 个答案:

答案 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条记录)。

只有拥有对象实例时才能使用访问者,在查询数据库时将无法使用访问者。

相关问题