我正在try 为这个用例找到解决方案.

我有一个USERS表,其中包含字段first_namelast_name以及一个名为full_name的定制属性.

 public function getFullNameAttribute()
 {
    return ucfirst($this->name) . ' ' . ucfirst($this->last_name);
 }

现在我正在寻找一种方法,可以同时过滤first_namelast_namefull_name. 示例:

搜索Sebastian Mendez应该会找到用户,如下例所示:

first_name last_name found
Juan Sebastian Mendez Tellez true
Sebastian Mendez Tellez true
Juan Sebastian Mendez true
Sebastian Tellez false
Juan Mendez false

我想不通了,我试着把搜索文本分割成不同的字符串,如下所示:

public function scopeSearch($query, $search){
 $str = "Sebastian Mendez";
 $str = explode(" ",$search);
 $query->whereIn('first_name', $str)->andWhereIn('last_name', $str);
}

但随后它也会返回其他结果,或者一个也不返回. 我想问题是这样的:

I don't know which part of the string is part of the first or last name...

推荐答案

您可以通过以下方式筛选first_namelast_name字段:

$users = User::where('first_name', 'like', '%'.$query.'%')
    ->orWhere('last_name', 'like', '%'.$query.'%')
    ->get();

或者,如果你想对full_name进行筛选,你可以这样做:

$users = User::whereRaw("concat(first_name, ' ', last_name) like '%".$query."%'")
    ->get();

Laravel相关问答推荐

Laravel模型嵌入嵌套模型时只附加属性

如何获取多态多对多关系子查询的自动 id 列名?

Laravel where 子句只返回一个数据库条目

Laravel init 查询多种用途

如何获得每种类型的总和

Laravel Livewire 组件在刷新后不会自动刷新/重新加载

Laravel 5.2 无法打开 laravel.log

Laravel PHP 框架的新手. /以外的路由不起作用

Carbon(laravel)处理无效日期

Laravel 5.6 - 如何在 api 控制器中获取 auth()->user() 或 $response->user()?

Laravel 4 的 Cron 作业(job)

Homestead:文件夹映射到错误的文档根目录

删除表后如何重新迁移laravel迁移

Laravel 规则和正则表达式 (OR) 运算符的问题

Laravel Mail 发送Electron邮件但返回 false

Laravel5如何将数组传递给查看

在 Laravel 4 中使用 HTML 占位符

Eloquent 模型不更新 updated_at 时间戳

Laravel 5 Illuminate\Http\Request 的方法不允许静态调用

phpunit 命令不适用于 Windows 7 上的 laravel 4