Laravel集合中的搜索值

时间:2018-12-13 22:53:47

标签: php laravel collections

我有一个包含用户联系人的集合,我想在该集合中搜索一个值。

我尝试了$ itemCollection-> where('username',$ search);但是只有在$ search值完全等于用户名但我想获得也包含该值的结果时,它才会显示给我。

例如,我使用“ yunus”值作为用户名,当我搜索“ yunus”时,它运行良好,但是我也想查看是否同时搜索“ yun”或“ y”值。

我搜索了它,但确实发现必须使用“喜欢”方法,但是我发现它不适用于收藏:(

我用于获取具有我搜索到的用户名值的用户联系人的功能

public function index(Request $request)
    {

      $contacts = [];
      $user = request()->user();
      $search = $request->search;

      Contact::for($user->id)
      ->orderBy('created_at', 'DESC')
      ->get()
      ->each(function ($contact) use ($user, &$contacts) {
          $friend = $contact->user1_id === $user->id ? $contact->user2 : $contact->user1;
          $contacts[] = $friend->toArray() + ['room' => $contact->room->toArray()];
      });

      $itemCollection = collect($contacts);

      $filtered = $itemCollection->where('username', $search);


      $filtered->all();


        return response()->json($filtered);
    }

结果:Json output

1 个答案:

答案 0 :(得分:0)

尝试使用filter()代替where()

$itemCollection = collect($contacts);
$filtered = $itemCollection->filter(function($item) use ($search) {
    return stripos($item['username'],$search) !== false;
});

https://laravel.com/docs/5.7/collections#method-filter