欢迎各位兄弟 发布技术文章
这里的技术是共享的
我有一个带有1个输入的表单按完整(!)名称进行过滤: 问题:全名在我的数据库用户表中被拆分为3个字段: 我想找到像 Doe博士这样的输入结果,还有John Doe或者只是Peter。 目前我只知道如何分别过滤每个字段: 任何的想法?谢谢!<label>Search by fullname:</label>
<input type="text" name="fullname">
# users
id | title | firstname | lastname
---------------------------------
1 | Dr. | John | Doe
2 | | Peter | Pan
fullname = title + firstname + lastname
$users = User::where('firstname', 'like', '%'.$keyword.'%')->get();
你可以使用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