Laravel 5.4 - 获取包含特定字符串的列

时间:2017-07-03 17:45:43

标签: php laravel laravel-5 laravel-pagination

如果我尝试获取名称包含传递字符串的数据库,我会发现以下错误。

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"];

现在我想获取name列包含传递字符串的数据的每个条目,并使用paginate();获取查询结果

我也尝试了类似foreach循环的东西,将命令推送到另一个数组但是这对我来说也没有用,因为entrys是Objects而不是数组。这就是为什么array_push无法处理这个问题。

有人知道我能做些什么来获得这些信息吗?

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

基于回答:

问题是我得到了数据库中的每个条目。首先,与搜索键匹配的索引和最后一个索引根本不与搜索键匹配。

示例:

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

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

  1. 测试dkkawdmawkdkaw
  2. mdkawdawtestdmwakdaw // test
  3. 苹果
  4. 桔子
  5. 任何
  6. Unicorn /// Unicorn - U是大写
  7. 更多unicornsdawdawd //独角兽
  8. 比萨饼
  9. 测试
  10. 我没有创意
  11. 所以我只想要:1,2,6,7和9.但是我得到的所有这些都从高匹配到完全不匹配。

2 个答案:

答案 0 :(得分:2)

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

$searchArray = explode(' ', $request->search);
$userGroups = Usergroups::query();
foreach ($searchArray as $searchValue) {
    $userGroups = $userGroups->orWhere('name', 'like', '%'.$searchValue.'%');
}
$userGroups = $userGroups->paginate(3);

答案 1 :(得分:2)

whereIn()不能用于类似查询。

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

Test DB Result