LIKE kullanarak veritabanı araması yapmak için Laravel'de Eloquent ORM kullanma


93

Bir arama sorgusu oluşturmak için Eloquent'in aktif kayıt yapısını kullanmak istiyorum, ancak bu bir LIKE araması olacak. User::find($term)Veya öğesini buldum User::find(1), ancak bu benzer bir ifade oluşturmuyor. Doğrudan bir cevap aramıyorum ama en azından biri bana bakmam için bir yön verebilirse bu harika olurdu!


2
laravel.com/docs/database/eloquent .. dokümantasyonu kullanabilirsiniz, çok açık.
— ytsejam

2
Bu sayfayı gördüm Joker karakterlerle arama yapmakla ilgili hiçbir şey görmedim. Ayrıca yüz binlerce satır olduğu için foreach döngüsünde bir normal ifade oluşturmak istemedim
— Jonathan

$ e-posta = DB :: tablo ('kullanıcılar') -> burada ('kimlik', '=', 1) -> yalnızca ('e-posta');
— ytsejam

belgelerde akıcı sorgu oluşturucu olarak adlandırılır.
— ytsejam

Cevabı ve yorumunuzu cevap olarak işaretleyebilseydim, yapardım. Beni doğru yöne
— Jonathan

Yanıtlar:


234

Bu sözdizimi ile LIKE kullanarak veritabanı bulma yapabilirsiniz:

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

1
çok verimli değil, "Önemli hata: Maksimum işlev iç içe geçme düzeyine ulaşıldı, durduruluyor! içinde ..."
— Sasi varna kumar

@gsk Sanırım katılıyorsunuz (with () yöntemini kullanarak) ve sonra her zamanki gibi sütunda arama yapabilirsiniz. Sözdizimi muhtemelen buna benzer table.field.
— Anthony

64

LIKE'ı sık sık kullanmanız gerekiyorsa, sorunu biraz basitleştirebilirsiniz. Eloquent ORM'yi miras alan modelde () gibi özel bir yöntem oluşturulabilir:

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

Öyleyse bu yöntemi şu şekilde kullanabilirsiniz:

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

Bunu yapmanın daha 'Laravel' yolu budur. Daha temiz ve etrafta dolaşıp her birini ayarlamak zorunda kalmadan kapsamı tek bir yerde ayarlamanıza izin veriyor ->where().
— Daniel Dewhurst

bu cevabı gerçekten seviyorum. Bu, modeli ve kullanımını çok zarif kılar ki bu laravel ile ilgilidir.
— deathemperor

29

Bilginize, operatörlerin listesi ( benzerleri ve diğerlerini içeren ) koddadır:

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

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

feragatname:

Joel Larson'ın cevabı doğru. Olumlu oyumu aldım.

Umarım bu yanıt, Eloquent ORM aracılığıyla neyin mevcut olduğuna daha fazla ışık tutacaktır ( insanları doğru yönlendirir ). Belgelere bağlantı çok daha iyi olsa da , bu bağlantı anlaşılması zor olduğunu kanıtladı.


18

Tek tırnak yerine çift tırnak kullanın, örneğin:

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

Kodum aşağıdadır:

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

Benim gibi çift tırnaktan hoşlanmıyorsanız, bu sizin için tek tırnakla çalışacaktır:

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

return view('pages/search/index', compact('books'));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.