wake-up-neo.com

Verwenden von Eloquent ORM in Laravel), um die Datenbanksuche mit LIKE durchzuführen

Ich möchte die aktive Datensatzerstellung von Eloquent verwenden, um eine Suchabfrage zu erstellen, aber es wird eine LIKE-Suche sein. Ich habe die User::find($term) oder User::find(1) gefunden, aber dies erzeugt keine ähnliche Aussage. Ich bin nicht auf der Suche nach einer direkten Antwort, aber wenn mir jemand eine Richtung geben könnte, in die ich schauen soll, wäre das großartig!

89
Jonathan

Mit der folgenden Syntax können Sie Datenbanksuchvorgänge mit LIKE durchführen:

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

Wenn Sie häufig LIKE verwenden müssen, können Sie das Problem ein wenig vereinfachen. Eine benutzerdefinierte Methode wie () kann in dem Modell erstellt werden, das den eloquenten ORM erbt:

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

Dann können Sie diese Methode folgendermaßen anwenden:

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

Zu Ihrer Information, die Liste der Operatoren (mit like und allen anderen) befindet sich im Code:

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

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

haftungsausschluss:

Joel Larsons Antwort ist richtig. Habe meine Zustimmung bekommen.

Ich hoffe, dass diese Antwort mehr Aufschluss darüber gibt, was über das eloquente ORM verfügbar ist ( weist die Leute direkt in die richtige Richtung ). Während ein Link zur Dokumentation weit besser wäre, hat sich dieser Link als schwer fassbar erwiesen.

28
dean grande

Verwenden Sie doppelte Anführungszeichen anstelle von einfachen Anführungszeichen, zB:

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

Unten ist mein Code:

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");
}
16
Myint Thu Lwin

Wenn Sie keine doppelten Anführungszeichen wie ich mögen, funktioniert dies für Sie mit einfachen Anführungszeichen:

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

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