Verwenden von Eloquent ORM in Laravel zum Durchsuchen der Datenbank mit LIKE

94

Ich möchte Eloquents aktive Datensatzerstellung verwenden, um eine Suchabfrage zu erstellen, aber es wird eine ähnliche Suche sein. Ich habe das User::find($term)oder gefunden User::find(1), aber dies erzeugt keine ähnliche Aussage. Ich suche keine direkte Antwort, aber wenn mir jemand zumindest eine Richtung geben könnte, in die ich schauen könnte, wäre das großartig!

Jonathan
quelle
2
laravel.com/docs/database/eloquent .. Sie können Dokumentation verwenden. Es ist sehr klar.
Ytsejam
2
Ich habe diese Seite gesehen. Ich habe einfach nichts über das Suchen mit Platzhaltern gesehen. Ich wollte auch keinen regulären Ausdruck in einer foreach-Schleife einrichten, da es Hunderttausende von Zeilen gibt
Jonathan
$ email = DB :: table ('users') -> where ('id', '=', 1) -> only ('email');
Ytsejam
In den Dokumenten wird es als fließender Abfrage-Generator bezeichnet.
Ytsejam
Wenn ich die Antwort und Ihren Kommentar als Antwort markieren könnte, würde ich. Vielen Dank, dass Sie mich in die richtige Richtung gebracht haben
Jonathan

Antworten:

235

Mit LIKE können Sie Datenbanksuche mit folgender Syntax durchführen:

Model::where('column', 'LIKE', '%value%')->get();
Joel Larson
quelle
1
nicht so effizient, wirft "Schwerwiegender Fehler: Maximale Funktionsverschachtelung von '100' erreicht, Abbruch! in ..."
Sasi varna kumar
@gsk Ich denke, Sie treten bei (mit der with () -Methode) und können dann die Spalte wie gewohnt durchsuchen. Die Syntax ist wahrscheinlich so etwas wie table.field.
Anthony
64

Wenn Sie LIKE häufig verwenden müssen, können Sie das Problem etwas vereinfachen. In dem Modell, das das eloquente ORM erbt, kann eine benutzerdefinierte Methode wie () erstellt werden:

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();
Jaroslaw
quelle
Dies ist die "Laravel" -Methode, um dies zu tun. Es ist nur sauberer und ermöglicht es Ihnen, das Zielfernrohr an einer Stelle anzupassen, anstatt herumgehen und jedes anpassen zu müssen ->where().
Daniel Dewhurst
Ich liebe diese Antwort wirklich. Dies macht das Modell und seine Verwendung sehr elegant, worum es bei Laravel geht.
Todeskaiser
29

Zu Ihrer Information, die Liste der Operatoren (die Like und alle anderen enthalten) 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 Gegenstimme bekommen.

Ich hoffe, diese Antwort wirft mehr Licht auf das, was über das eloquente ORM verfügbar ist ( zeigt die Leute direkt in die richtige Richtung ). Ein Link zur Dokumentation wäre zwar weitaus besser, dieser Link hat sich jedoch als schwer fassbar erwiesen.

Dekan Grande
quelle
18

Verwenden Sie doppelte Anführungszeichen anstelle von einfachen Anführungszeichen, z.

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

Wenn Sie doppelte Anführungszeichen wie ich nicht 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'));
Sinan Eldem
quelle