Laravel Eloquent Queries - PullRequest
       2

Laravel Eloquent Queries

0 голосов
/ 01 октября 2019

Мне нужна помощь с Eloquent. Когда я пытался найти manufacturer name, он ничего не возвращает, но если я пытаюсь найти manufacturer или name, он возвращает мне некоторые результаты.

Моя текущая структура таблицы:

Продукт:

 manufacturer_id, FK id on manufacturer

 model_id, FK id id on model

Производитель:

 id
 name

Модель:

 id
 manufacturer_id, FK id on manufacturer
 name

Мой код таков:

    $q = Input::get("query");
    $words = str_replace(" ", "%", $q);

    $cars = Product::whereHas('model', function ($query) use ($words) {
        $query->where('name', 'like', "%$words%");
    })->orWhereHas('manufacturer', function ($query) use ($words) {
        $query->where('name', 'like', "%$words%");
    })->get();

Пожалуйста, помогитея, я действительно новичок в этом.

Ответы [ 5 ]

0 голосов
/ 03 октября 2019

Попробуйте это

$query->Where('column_name', 'LIKE', '%' . $value . '%')
0 голосов
/ 01 октября 2019

Используйте конкатенацию, например:

$query->where('name', 'like', '%' . $words . '%);

Вместо этого:

$query->where('name', 'like', "%$words%");
0 голосов
/ 01 октября 2019

используйте это.

$cars = Product::whereHas('model', function ($query) use ($words) {
        $query->where('name', 'like', '%' . $words . '%');
    })->orWhereHas('manufacturer', function ($query) use ($words) {
        $query->where('name', 'like', '%' . $words . '%');
    })->get();

, поскольку вы используете "%$words%", оно не будет принимать никакого значения.

"%{$words}%" или '%' . $words . '%', вы также можете использовать это.

0 голосов
/ 01 октября 2019

Я не уверен, почему вы это делаете:

$words = str_replace(" ", "%", $q);

, потому что позже вы все равно добавляете "%" с переменной $words. Так что сделайте это так:

$words = trim(Input::get("query"));

$cars = Product::whereHas('model', function ($query) use ($words) {
    $query->where('name', 'like', "%$words%");
})->orWhereHas('manufacturer', function ($query) use ($words) {
    $query->where('name', 'like', "%$words%");
})->get();

Это должно работать для поиска по одному слову. Теперь, если вы хотите сопоставить несколько слов, разделенных пробелами, вам нужно будет использовать explode(), чтобы фактически получить каждое слово, и написать комбинацию OR AND WHERE для соответствия результатам. ИЛИ вы можете использовать MYSQL FULL TEXT QUERY, но это выходит за рамки этого вопроса.

Пожалуйста, задайте для этого отдельный вопрос.

Надеюсь, это поможет

0 голосов
/ 01 октября 2019

Попробуй вот так.

$query->where('name', 'like', '%' . $words . '%);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...