Laravel - запрашивать часть целого числа и логическое значение

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

https://ibb.co/2KNJzVW

Как вы можете видеть в столбце id, у меня есть что-то вроде этого значения:

идентификатор продукта
PPAETRABN018283

Итак, в поле ввода (моя форма поиска) -

Если я ввожу продукт, я могу получить результат, так как в качестве идентификатора есть значение идентификатора продукта.
Если я ввожу PPAE, я могу получить результат, так как в качестве идентификатора есть значение PPAETRABN018283.

НО

Если я ввожу 182, я не могу получить никакого результата, хотя я использую LIKE. Можешь мне сказать почему?

И

У меня есть еще один столбец, называемый доступностью, который содержит истину и ложь как логическое значение. Если я выполняю поиск с true, я могу получить результат, но я выполняю поиск с false, я не могу получить результат. Можешь мне сказать почему?

Вот мой код:

$trimmed_array = $request->all();
$whereLike = $whereIn = $where = [];

foreach( $trimmed_array as $k => $v ) {
    if ( $k !== 'page' && $k !== 'projectToken' && $k !== 'userId' ) {
        if ( !empty( $v ) )  {
            if ( is_numeric( $v) ) {
                $whereIn[] = [$k, (int) $v];
            } elseif ( trim( strtolower($v)) == 'false' || trim(strtolower($v)) == 'true') {
                $where[] = [$k, $v ];
            } else {
                $whereLike[] = [$k, 'LIKE', '%'. $v .'%' ];
            }
        }
    }            
}

$projectToken = $request->input('projectToken');
$userId = $request->input('userId');

$this->set_connection( $projectToken, $userId );

$get_project_id =  DB::connection('mysql')->table('projects')->where('token', $projectToken )->get(['id_project'])->first();
$collection = 'products_' . $get_project_id->id_project;
$collection = 'products_105';

$search = DB::connection('mongodb')->collection( $collection );

if ( count( $whereIn) ) {
    foreach( $whereIn as $array ) {
        $key = $array[0];
        $value = (int) $array[1];
        $search->whereIn($key, [$value]);
    }
} 

if ( count( $whereLike) ) {
    $search->where($whereLike);
}

if ( count( $where ) ) {
    foreach( $where as $arr ) {
        $key = $arr[0];
        $value = (bool) $arr[1];
        $search->where($key, $value);
    }
}

$search = $search->paginate(100);
return response()->json( [ 'product_value' => $search ], 200);
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В таких случаях мы используем LIKE с переносом %, например:

$needle = ...; // What to find (User's input).
$query = ...;

$query->where('myColumn', 'like', '%' . $needle . '%');

И если вы ищете в нескольких столбцах, попробуйте:

$needle = ...;
$query = ...;

// List search target.
$columns = ['myFirstColumn', 'myOtherColumn'];
$pattern = '%' . $needle . '%';

foreach ($columns as $name) {
    $query = $query->orWhere($name, 'like', $pattern);
}

Обратите внимание, что если третий параметр метода where(...) не установлен, Laravel по умолчанию автоматически использует оператор условия «=» в запросе, в то время как выше вместо этого используется «LIKE».

Спасибо, хотя я нашел решение. Работает с orWhere

Shibbir 17.11.2022 08:00

Другие вопросы по теме