Использование Eloquent ORM в Laravel для поиска в базе данных с использованием LIKE

79

Я хочу использовать активное создание записей для создания поискового запроса, но это будет LIKE-поиск. Я нашел User::find($term) или User::find(1), но это не создает аналогичный оператор. Я не ищу прямого ответа, но если кто-то может хотя бы дать мне направление, чтобы посмотреть, это будет здорово!

  • 2
    laravel.com/docs/database/eloquent .. вы можете использовать документацию, это очень ясно.
  • 2
    Я видел эту страницу, я просто ничего не видел о поиске с подстановочными знаками. Я также не хотел устанавливать регулярное выражение в цикле foreach, так как в нем сотни тысяч строк
Показать ещё 4 комментария
Теги:
eloquent
orm
sql-like

5 ответов

194
Лучший ответ

Вы можете выполнять поиск базы данных с использованием LIKE с помощью этого синтаксиса:

Model::where('column', 'LIKE', '%value%')->get();
  • 2
    это хорошо, как я могу искать из связанной модели также?
  • 1
    не так эффективно, выдает «Неустранимая ошибка: достигнут максимальный уровень вложенности функции« 100 », прерывание! in ...»
Показать ещё 1 комментарий
56

Если вам нужно часто использовать LIKE, вы можете немного упростить эту проблему. В модели, которая наследует Eloquent ORM, может быть создан пользовательский метод like():

public  function scopeLike($query, $field, $value){
        return $query->where($field, 'LIKE', "%$value%");
}

Итак, вы можете использовать этот метод таким образом:

User::like('name', 'Tomas')->get();
  • 0
    Это более «Laravel» способ сделать это. Это просто чище и позволяет вам настраивать область видимости в одном месте, вместо того, чтобы обходить и настраивать каждый ->where() .
  • 0
    действительно люблю этот ответ. Это делает модель и ее использование очень элегантным, а это то, что делает Laravel.
24

FYI, список операторов (содержащий как и все остальные) находится в коде:

/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php

protected $operators = array(
    '=', '<', '>', '<=', '>=', '<>', '!=',
    'like', 'not like', 'between', 'ilike',
    '&', '|', '^', '<<', '>>',
    'rlike', 'regexp', 'not regexp',
);

отказ от ответственности:

Ответ Джоэл Ларсон правильный. Получил мой взнос.

Я надеюсь, что этот ответ проливает больше света на то, что доступно через Eloquent ORM (указывает на людей в правильном направлении). Хотя ссылка на документацию будет далеко лучше, эта ссылка оказалась неуловимой.

12

Используйте двойные кавычки вместо одиночной кавычки, например:

where('customer.name', 'LIKE', "%$findcustomer%")

Ниже мой код:

public function searchCustomer($findcustomer)
{
    $customer = DB::table('customer')
                  ->where('customer.name', 'LIKE', "%$findcustomer%")
                  ->orWhere('customer.phone', 'LIKE', "%$findcustomer%")
                  ->get();

    return View::make("your view here");
}
1

Если вам не нравятся двойные кавычки, подобные мне, это будет работать для вас с одинарными кавычками:

$value = Input::get('q');
$books = Book::where('name', 'LIKE', '%' . $value . '%')->limit(25)->get();

return view('pages/search/index', compact('books'));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню