gpt4 book ai didi

php - laravel 搜索以空格分隔的多个单词

转载 作者:IT王子 更新时间:2023-10-29 00:30:04 25 4
gpt4 key购买 nike

我是 laravel 查询生成器的新手,我想搜索在输入字段中输入的多个单词,例如,如果我输入“jhon doe”,我想获取任何包含 jhon 或 doe 的列

我已经看到/尝试过使用 php MySQL 的解决方案,但无法适应查询构建器

//1. exploding the space between the keywords 

//2. using foreach apend the query together

$query = "select * from users where";

$keywordRaw = "jhon doe";
$keywords = explode(' ', $keywordRaw );
foreach ($keywords as $keyword){
$query.= " first_name LIKE '%" + $keyword +"%' OR ";
}

我如何使用查询构建器来做到这一点

这就是我目前所拥有的,什么是正确的做法,

$keywordRaw = "jhon doe";
//how do I explode this words and append them along with their appropriate query
$users = User::select('users.*')
->where('first_name', 'LIKE', '%'.$keywordRaw.'%')

请帮助,在此先感谢

最佳答案

这是使用 Query\Builder 的方式,但首先要注意一些:

// user can provide double space by accident, or on purpose:
$string = 'john doe';

// so with explode you get this:
explode(' ', $string);
array(
0 => 'john',
1 => '',
2 => 'doe'
)

// Now if you go with LIKE '%'.value.'%', you get this:
select * from table where name like '%john%' or name like '%%' or ...

也就是说,您显然不能依赖explode,因为在上述情况下您会得到所有行。

所以,这是你应该做的:

$string = 'john  doe';

// split on 1+ whitespace & ignore empty (eg. trailing space)
$searchValues = preg_split('/\s+/', $string, -1, PREG_SPLIT_NO_EMPTY);

$users = User::where(function ($q) use ($searchValues) {
foreach ($searchValues as $value) {
$q->orWhere('name', 'like', "%{$value}%");
}
})->get();

where 中有闭包,因为将 或 where 子句括在括号中是一种很好的做法。例如,如果您的 User 模型使用了 SoftDeletingScope 而您没有按照我的建议进行操作,那么您的整个查询就会一团糟。

关于php - laravel 搜索以空格分隔的多个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28270244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com