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.