Використання Eloquent ORM у Laravel для здійснення пошуку в базі даних за допомогою LIKE


94

Я хочу використати активну побудову записів Eloquent для побудови пошукового запиту, але це буде пошук ПОХАДНИЙ. Я знайшов User::find($term)або User::find(1), але це не породжує подібне твердження. Я не шукаю прямої відповіді, але якби хтось міг дати мені хоча б вказівку шукати, це було б чудово!


2
laravel.com/docs/database/eloquent .. Ви можете використовувати документацію - це дуже зрозуміло.
ytsejam

2
Я бачив цю сторінку, просто не бачив нічого про пошук за допомогою символів підстановки. Я також не хотів встановлювати регулярний вираз у циклі foreach, оскільки є сотні тисяч рядків
Джонатан

$ email = DB :: table ('users') -> where ('id', '=', 1) -> only ('email');
ytsejam

у документах це називається конструктором плавних запитів.
ytsejam

Якби я міг позначити відповідь та ваш коментар як відповідь, я б. Дякую за те, що ви в правильному напрямку
Джонатан

Відповіді:


235

Ви можете знаходити бази даних за допомогою LIKE з таким синтаксисом:

Model::where('column', 'LIKE', '%value%')->get();

1
не настільки ефективно, кидає "Фатальну помилку: досягнутий максимальний рівень вкладеності функції" 100 ", переривання! в ..."
Сасі варна кумар,

@gsk Я думаю, ви приєднуєтесь (використовуючи метод with ()), а потім можете шукати в стовпці, як зазвичай. Синтаксис, мабуть, приблизно такий table.field.
Ентоні

64

Якщо вам потрібно часто використовувати LIKE, ви можете трохи спростити проблему. В моделі, яка успадковує Eloquent ORM, може бути створений спеціальний метод, подібний до ():

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

Тоді ви можете використовувати цей метод таким чином:

User::like('name', 'Tomas')->get();

Це більш «ларавельський» спосіб зробити це. Він просто чистіший і дозволяє регулювати область дії в одному місці, замість того, щоб об’їжджати та регулювати кожен ->where().
Деніел Дьюхерст,

дуже люблю цю відповідь. Це робить модель та її використання дуже елегантними, саме про це і полягає Laravel.
деамператор

29

FYI, список операторів (що містить подібні та всі інші) знаходиться в коді:

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

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

застереження:

Відповідь Джоела Ларсона правильна. Отримав мою позитивну оцінку.

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


18

Використовуйте подвійні лапки замість одинарних, наприклад:

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");
}

3

Якщо вам не подобаються подвійні лапки, як я, це підійде вам з одинарними лапками:

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

return view('pages/search/index', compact('books'));
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.