Sử dụng Eloquent ORM trong Laravel để thực hiện tìm kiếm cơ sở dữ liệu bằng LIKE


94

Tôi muốn sử dụng bản ghi đang hoạt động của Eloquent để tạo truy vấn tìm kiếm, nhưng nó sẽ là tìm kiếm LIKE. Tôi đã tìm thấy User::find($term)hoặc User::find(1), nhưng điều này không tạo ra một câu lệnh thích. Tôi không tìm kiếm câu trả lời trực tiếp, nhưng nếu ai đó ít nhất có thể cho tôi một hướng để xem xét thì điều đó thật tuyệt!


2
laravel.com/docs/database/eloquent .. bạn có thể sử dụng tài liệu ıt rất rõ ràng.
ytsejam

2
Tôi đã xem trang này, tôi không thấy gì về cách tìm kiếm bằng các ký tự đại diện. Tôi cũng không muốn thiết lập một regex trong một vòng lặp foreach như có hàng trăm hàng ngàn hàng
Jonathan

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

nó được gọi là trình tạo truy vấn thông thạo trong tài liệu.
ytsejam

Nếu tôi có thể đánh dấu câu trả lời và nhận xét của bạn là câu trả lời, tôi sẽ làm. Cảm ơn bạn đã đưa tôi đi đúng hướng
Jonathan

Câu trả lời:


235

Bạn có thể tìm thấy cơ sở dữ liệu bằng cách sử dụng LIKE với cú pháp sau:

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

1
không quá hiệu quả, ném "Fatal error: mức độ chức năng làm tổ tối đa '100' đạt được, hủy trong ..."
Sasi Varna kumar

@gsk Tôi nghĩ bạn tham gia (sử dụng phương thức with ()) và sau đó bạn có thể tìm kiếm cột như bình thường. Cú pháp có thể là một cái gì đó giống như table.field.
Anthony

64

Nếu bạn cần thường xuyên sử dụng LIKE, bạn có thể đơn giản hóa vấn đề một chút. Một phương thức tùy chỉnh như () có thể được tạo trong mô hình kế thừa ORM Eloquent:

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

Vì vậy, sau đó bạn có thể sử dụng phương pháp này theo cách như sau:

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

Đây là cách 'Laravel' hơn để làm việc này. Nó chỉ gọn gàng hơn và cho phép bạn điều chỉnh phạm vi ở một nơi, thay vì phải đi xung quanh và điều chỉnh từng thứ ->where().
Daniel Dewhurst

thực sự thích câu trả lời này. Điều này làm cho mô hình và cách sử dụng của nó rất thanh lịch, đó là những gì laravel hướng đến.
deathempon,

29

FYI, danh sách các toán tử (chứa like và tất cả các toán tử khác) có trong mã:

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

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

từ chối trách nhiệm:

Câu trả lời của Joel Larson là đúng. Nhận được sự ủng hộ của tôi.

Tôi hy vọng câu trả lời này làm sáng tỏ hơn những gì có sẵn thông qua Eloquent ORM ( chỉ mọi người trực tiếp ). Trong khi một liên kết đến tài liệu sẽ là xa tốt hơn, liên kết đó đã chứng tỏ khó nắm bắt.


18

Sử dụng dấu ngoặc kép thay vì dấu nháy đơn, ví dụ:

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

Dưới đây là mã của tôi:

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

Nếu bạn không thích dấu ngoặc kép như tôi, điều này sẽ phù hợp với bạn với dấu ngoặc đơn:

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

return view('pages/search/index', compact('books'));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.