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

标签 php laravel methods eloquent laravel-5.2

这是针对 Laravel 5.2 的。我的用户模型中定义了如下方法:

public function name()
{
    return "$this->name_first $this->name_last";
}

我正在尝试弄清楚如何将其用作查询的一部分,但由于一个明显的原因,这似乎是不可能的:数据库对该方法一无所知,这非常有意义.然而,我试图实现的概念在某些情况下是有意义的,所以我想看看是否有一种方法可以在 Eloquent 中自然地完成它。

这行不通,但它代表了我要实现的目标:

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

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

    return $query->get();
}

简而言之,数据库只知道 name_firstname_last,但我希望能够在 name而不存储它。也许存储连接的名称没什么大不了的,我应该这样做,但我也在努力学习。

最佳答案

我同意 Bogdan 的观点,名字或姓氏中有空格的问题使得对各个列的查询变得困难,所以这可能是要走的路。可以通过将其定义为自定义范围来增加代码重用: 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();

关于php - 在 Eloquent 查询中使用 Laravel 模型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35856456/

相关文章:

php - 在多维数组中填充值 (PHP)

php - Yii2:如何创建自定义删除按钮?

java - 我怎样才能在 Java 中获得第 5 个根?

java - 解析日期格式时出现问题,需要更改此方法以接受空值

java类,扩展外部API功能

php - 我如何使用 MATCH/AGAINST 创建简单的搜索?

php - 404 页面未找到 - CodeIgniter 相关

php - 是否可以使用一个 mysql 数据库拥有两个 Laravel php 网站?

php - laravel orm : update result set of a ->get() query at once

javascript - 将表单数据从表单的 View 传递到 Controller