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!


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();

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();

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.


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");
}

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'));
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.