Поиск значения в коллекции Laravel - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть коллекция, которая содержит контакты пользователя, я хочу найти значение в этой коллекции.

Я пробовал $ itemCollection-> where ('username', $ search);но он показывает мне, только если значение $ search полностью совпадает с именем пользователя, но я хочу получить результаты, которые тоже содержат это значение.

Например, у меня есть значение "yunus" в качестве имени пользователя и когда я`В поиске "yunus" он работает хорошо, но я хочу увидеть результат, если я тоже буду искать значения "yun" или "y".

Я искал его и обнаружил, что должен использовать метод where 'like'но я обнаружил, что это не работает для коллекций: (* ​​1007 *

Моя функция для получения контактов пользователя, у которой есть мое искомое значение имени пользователя

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

1 Ответ

0 голосов
/ 14 декабря 2018

Попробуйте использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...