2

如果我尝试获取名称包含传递字符串的数据库条目,则会收到以下错误。

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 无法处理这个问题。

有人知道我可以做些什么来获得参赛作品吗?

感谢您的帮助,并为我的英语不好感到抱歉!


根据答案:

问题是我得到了数据库中的每个条目。起初与搜索键匹配的条目和最后一个条目与搜索键完全不匹配。

例子:

我正在通过“测试”和“独角兽”

我的数据库中有 10 个条目。例如:

  1. 测试 dkkawdmawkdkaw
  2. mdkawdawtestdmwakdaw // 测试
  3. 苹果
  4. 橘子
  5. 任何事物
  6. Unicorn /// 独角兽 - U 是大写
  7. 更多 unicornsdawdawd //独角兽
  8. 比萨
  9. 测试
  10. 我没有创意

所以我只想要:1、2、6、7 和 9。但我将它们全部从高匹配排序到根本不匹配。

4

2 回答 2

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 ?;

测试数据库 结果

于 2017-07-03T17:51:28.317 回答
2

你不能这样使用whereIn()。改用多个orWhere(),例如:

$searchArray = explode(' ', $request->search);
$userGroups = Usergroups::query();
foreach ($searchArray as $searchValue) {
    $userGroups = $userGroups->orWhere('name', 'like', '%'.$searchValue.'%');
}
$userGroups = $userGroups->paginate(3);
于 2017-07-03T17:50:04.550 回答