在Eloquent查询中使用Laravel模型方法

Ant*_*ony 5 php methods laravel eloquent laravel-5.2

这是Laravel 5.2.我的用户模型中有一个如下定义的方法:

public function name()
{
    return "$this->name_first $this->name_last";
}
Run Code Online (Sandbox Code Playgroud)

我试图找出如何使用它作为查询的一部分,但似乎不可能有一个明显的原因:数据库不知道任何关于方法的东西,这是完全合理的.然而,我想要实现的概念在某些情境中是有意义的,所以我试图看看是否有办法在Eloquent中自然地完成它.

这不起作用,但它代表了我正在努力实现的目标:

public function index(Request $request)
{
    $query = new User();

    if(Request::has('name')) {
        $query = $query->where('name', 'LIKE', '%' . Request::input('name') . '%');
    }

    return $query->get();
}
Run Code Online (Sandbox Code Playgroud)

简而言之,数据库只知道name_firstname_last,但我希望能够在name不存储的情况下搜索(和排序).也许存储连接的名称没什么大不了的,我应该这样做,但我也在努力学习.

小智 4

我同意博格丹的观点,名字或姓氏中存在空格的问题使得对各个列的查询变得困难,所以这可能是要走的路。可以通过将其定义为自定义范围来增加代码重用: https://laravel.com/docs/5.2/eloquent#local-scopes

// class User
public function scopeOfFullNameLike($query, $fullName)
{
    return $query->whereRaw('CONCAT(name_first, " ", name_last) LIKE "%?%"', [$fullName]);
}
// ...
User::ofFullNameLike('john doe')->get();
Run Code Online (Sandbox Code Playgroud)