欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Laravel / Eloquent:如何对组合字段使用WHERE LIKE? 有大用

Laravel / Eloquent:如何对组合字段使用WHERE LIKE?

  • 回答 (2)

  • 关注 (0)

  • 查看 (3702)

我有一个带有1个输入的表单按完整(!)名称进行过滤

<label>Search by fullname:</label>
<input type="text" name="fullname">

问题:全名在我的数据库用户表中被拆分为3个字段

# users
id | title | firstname | lastname
---------------------------------
1  | Dr.   | John      | Doe
2  |       | Peter     | Pan

fullname = title + firstname + lastname

我想找到像 Doe博士这样的输入结果,还有John Doe或者只是Peter

目前我只知道如何分别过滤每个字段:

$users = User::where('firstname', 'like', '%'.$keyword.'%')->get();

任何的想法?谢谢!

提问于

Laravel / Eloquent:如何对组合字段使用WHERE LIKE?

2 个回答

用户回答回答于

你可以使用DB :: raw()MySQL的concat来实现这个目的:

$users = User::where(DB::raw('concat(title," ",firstname," ",surname)'), 'like', '%'.$keyword.'%')->get();
用户回答回答于

这是一个没有最佳解决方案但可以提供帮助

$fullname = 'Dr. Doe';
$parts = explode(' ', $fullname);
$user = new User();
$query = $user->newQuery();
$query->where('id', '>', 1); // or other condition

foreach ($parts as $part) {
    $query->orWhere('firstname', 'like', '%' . $part . '%')
        ->orWhere('surname', 'like', '%' . $part . '%')
        ->orWhere('title', 'like', '%' . $part . '%');
}


来自 https://cloud.tencent.com/developer/ask/206908


普通分类: