2017-05-11 3 views
1

Wenn ich die Laravel Collection-Suchfunktion verwende, wird immer false zurückgegeben.Laravel Eloquent Collection Suche gibt immer false zurück

Code:

$entries = Entry::all(); 
$results = $entries->search('Jack', true); 
dd($results); 

Ausgang: false

Ausgang dd ($ Einträge):

Collection {#218 ▼ 
    #items: array:9 [▼ 
    0 => Entry {#219 ▼ 
     #fillable: array:2 [▶] 
     #connection: "mysql" 
     #table: null 
     #primaryKey: "id" 
     #keyType: "int" 
     +incrementing: true 
     #with: [] 
     #perPage: 15 
     +exists: true 
     +wasRecentlyCreated: false 
     #attributes: array:5 [▶] 
     #original: array:5 [▶] 
     #casts: [] 
     #dates: [] 
     #dateFormat: null 
     #appends: [] 
     #events: [] 
     #observables: [] 
     #relations: [] 
     #touches: [] 
     +timestamps: true 
     #hidden: [] 
     #visible: [] 
     #guarded: array:1 [▶] 
    } 
    1 => Entry {#220 ▶} 
    2 => Entry {#221 ▶} 
    3 => Entry {#222 ▶} 
    4 => Entry {#223 ▶} 
    5 => Entry {#224 ▶} 
    6 => Entry {#225 ▶} 
    7 => Entry {#226 ▶} 
    8 => Entry {#227 ▶} 
    ] 
} 

Sorry für die schreckliche Formatierung.

+0

Können Sie 'dd (Einträge $)' und das Ergebnis posten? – Ian

Antwort

0

Sie müssen eine einfache Sammlung mit search() Methode verwenden. Also, wenn Sie nach Namen suchen wollen, dies tun:

$entries = Entry::pluck('name'); 
$results = $entries->search('Jack'); 

BTW, das ist ein wirklich schlechter Weg, um die Suche zu tun, weil es zuerst alle Einträge in die Speicher geladen wird, und dann wird die Suche machen.

Ein viel besserer Ansatz ist Eloquent oder Query Builder zu verwenden:

$results = Entry::where('name', 'like', '%'.$name.'%')->get(); 

Oder einfach:

$results = Entry::where('name', $name)->get(); 

Wenn Sie einen ganzen Namen suchen möchten.

+0

Das ist okay, wenn ich nur in der Namensspalte suchen möchte, aber ich möchte ein Suchfeld verwenden, um alle Einträge nach den gegebenen Daten zu suchen. – TenTimesCake

+0

@TenTimesCake dann mehrere 'orWhere()' Klauseln hinzufügen. Das Laden aller Daten und dann die Verwendung der 'search()' collections-Methode ist eine schreckliche Idee. –

0

Sie können immer die filter() Funktion von Laravel Kollektionen:

$matchingRecords = $allRecords->filter(function($key, $record){ 
    return $record->name == "Jack"; 
}); 

Alternativen sind die first() Funktion Ergebnisse der ersten gefunden zu begrenzen, oder search().

Überprüfen Sie https://laravel.com/docs/5.4/collections#available-methods für weitere Informationen.

Verwandte Themen