Laravel 5.4 - 获取列包含特定字符串的条目
Laravel 5.4 - get entrys where column contains specific string
如果我尝试获取名称包含传递的字符串的数据库条目,我会收到以下错误。
Invalid argument supplied for foreach()
.
$search = $request['search'];
$key_search = explode(' ', $search);
$usergroups = Usergroups::whereIn('name', 'like', '%' . $search . '%')->paginate(3);
$key_search 看起来像这样:[0 => "Test", 1 => "Unicorn"];
现在我想获取名称列中包含传递的字符串的数据的每个条目,并使用 paginate();
获取查询结果
我也尝试过类似 foreach 循环的方法,将条目推入另一个数组,但这对我也不起作用,因为条目是对象而不是数组。这就是为什么 array_push 无法处理这个问题。
有人知道我可以做些什么来获得参赛作品吗?
感谢您的帮助,抱歉我的英语不好!
基于答案:
问题是我获取了数据库中的所有条目。起初与搜索键匹配的条目和最后的条目根本不与搜索键匹配。
示例:
我正在通过 "test" 和 "unicorn"
我的数据库中有 10 个条目。例如:
- 测试 dkkawdmawkdkaw
- mdkawdawtestdmwakdaw // 测试
- 苹果
- 橘子
- 任何东西
- Unicorn /// Unicorn - U 为大写
- 更多 unicornsdawdawd //unicorn
- 披萨
- 测试
- 我没有创意
所以我只想要:1、2、6、7 和 9。但是我将它们全部排序,从高匹配到完全不匹配。
你不能这样使用whereIn()
。使用多个 orWhere()
代替,例如:
$searchArray = explode(' ', $request->search);
$userGroups = Usergroups::query();
foreach ($searchArray as $searchValue) {
$userGroups = $userGroups->orWhere('name', 'like', '%'.$searchValue.'%');
}
$userGroups = $userGroups->paginate(3);
whereIn()
不能用于like查询
$usergroups = Usergroups::query();
foreach($key_search as $search) {
$usergroups = $usergroups->orWhere('name', 'like', '%' . $search . '%')
}
$usergroups = $usergroups->paginate(3);
// Results in
// select * from `usergroups` where `name` like ? or where `name` like ?;
你也可以试试这个。
$usergroups = Usergroups::where(function ($query) use ($key_search) {
foreach($key_search as $search) {
$query->orWhere('name', 'like', '%' . $search . '%');
}
})->paginate(3);
// Results in
// select * from `usergroups` where (`name` like ? or `name` like ?;
如果我尝试获取名称包含传递的字符串的数据库条目,我会收到以下错误。
Invalid argument supplied for foreach()
.
$search = $request['search'];
$key_search = explode(' ', $search);
$usergroups = Usergroups::whereIn('name', 'like', '%' . $search . '%')->paginate(3);
$key_search 看起来像这样:[0 => "Test", 1 => "Unicorn"];
现在我想获取名称列中包含传递的字符串的数据的每个条目,并使用 paginate();
我也尝试过类似 foreach 循环的方法,将条目推入另一个数组,但这对我也不起作用,因为条目是对象而不是数组。这就是为什么 array_push 无法处理这个问题。
有人知道我可以做些什么来获得参赛作品吗?
感谢您的帮助,抱歉我的英语不好!
基于答案:
问题是我获取了数据库中的所有条目。起初与搜索键匹配的条目和最后的条目根本不与搜索键匹配。
示例:
我正在通过 "test" 和 "unicorn"
我的数据库中有 10 个条目。例如:
- 测试 dkkawdmawkdkaw
- mdkawdawtestdmwakdaw // 测试
- 苹果
- 橘子
- 任何东西
- Unicorn /// Unicorn - U 为大写
- 更多 unicornsdawdawd //unicorn
- 披萨
- 测试
- 我没有创意
所以我只想要:1、2、6、7 和 9。但是我将它们全部排序,从高匹配到完全不匹配。
你不能这样使用whereIn()
。使用多个 orWhere()
代替,例如:
$searchArray = explode(' ', $request->search);
$userGroups = Usergroups::query();
foreach ($searchArray as $searchValue) {
$userGroups = $userGroups->orWhere('name', 'like', '%'.$searchValue.'%');
}
$userGroups = $userGroups->paginate(3);
whereIn()
不能用于like查询
$usergroups = Usergroups::query();
foreach($key_search as $search) {
$usergroups = $usergroups->orWhere('name', 'like', '%' . $search . '%')
}
$usergroups = $usergroups->paginate(3);
// Results in
// select * from `usergroups` where `name` like ? or where `name` like ?;
你也可以试试这个。
$usergroups = Usergroups::where(function ($query) use ($key_search) {
foreach($key_search as $search) {
$query->orWhere('name', 'like', '%' . $search . '%');
}
})->paginate(3);
// Results in
// select * from `usergroups` where (`name` like ? or `name` like ?;