За последние 24 часа нас посетили 8811 программистов и 848 роботов. Сейчас ищут 352 программиста ...

Выборка отфильтрованных элементов из бд

Тема в разделе "Laravel", создана пользователем Dasderdas, 24 янв 2023 в 21:06.

  1. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    68
    Симпатии:
    0
    Есть метод поиска который возвращает булевое значение, он принимает 1 запись из базы данных и поисковый запрос. Как вытягивать из бд только те записи к котором метод search вернёт true? Причём необходимо именно вытягивать их, а не получить коллекцию а после фильтровать, т.к тогда не получается воспользоваться пагинацией.
    Если короче: Как получать только проверенные данные из бд а после пагинировать их? И возможно ли это вообще?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.608
    Симпатии:
    686
    Адрес:
    Татарстан
    Возможно всё....
    Покажите свои наработки
     
  3. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    68
    Симпатии:
    0
    Не понимаю какие наработки вас интересуют из вопроса. Всё что я делал просто не поддаётся исправлению т.к потенциально не может быть рабочим. Тут просто технический вопрос, совмещения кастомной фильтрации и нативной пагинации laravel, и нет повода предполагать что это возможно. Вот код как это должно было выглядеть:
    PHP:
    1. $searchQuery = $request->validated()['search'];
    2. $checkHandler = new Search;
    3. $goods = Goods::all();
    4. foreach ($goods as $key => $t) {
    5.     if ($checkHandler->Search($searchQuery, $t)) {
    6.         $goods->pull($key);
    7.     }
    8. }
    9. $goods->paginate(15);
    Код не может быть рабочим т.к $goods это коллекция а метод paginate доступен только моделям.
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.608
    Симпатии:
    686
    Адрес:
    Татарстан
    не понимаю - почему не использовать where в запросе?
    PHP:
    1. $goods = Goods::where(....)-get();
    или если сырые данные whereRaw()

    а по всей базе построчно искать - при достаточном кол-ве ... я думаю от 1000 записей.. капец такому поиску
     
    #4 ADSoft, 25 янв 2023 в 15:43
    Последнее редактирование: 25 янв 2023 в 15:48
  5. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    68
    Симпатии:
    0
    Мне необходимо реализовать поиск по названию товара(и не только но пока опуситим), для этого необходимо использовать регулярку. Как я должен в функции построения запросов использовать регулярное выражение? Данные для поиска не приходят такими как они записанные в бд. Мы не можем через условие подставлять данные для where(), так как на один результат поиска может быть найдено разные результаты. Поиск должен быть таким что-бы когда запрос например "а" мы получали все записи которые в названии имеют "а"
     
    #5 Dasderdas, 25 янв 2023 в 20:12
    Последнее редактирование: 25 янв 2023 в 20:20
  6. don.bidon

    don.bidon Новичок

    С нами с:
    28 мар 2021
    Сообщения:
    526
    Симпатии:
    81
    БД умеют в регулярки, попробуй построить просто SQL-запрос, потом копай, как это в ларке исполнить.
     
  7. dantemgs

    dantemgs Новичок

    С нами с:
    24 дек 2022
    Сообщения:
    24
    Симпатии:
    4
  8. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    68
    Симпатии:
    0
    Что-ж, окей, с названием так и поступил, спасибо.
    PHP:
    1. $goods = Goods::where('name', 'LIKE', '%' . $searchQuery . '%');
    А теперь самое сложное: как при этом ещё искать не только по названию а и по названию записей в той таблице что привязана к этой в отношении многие ко многим? Причём не среди выбранных, а именно в одном запросе