2017-05-11 8 views
1

Laravel Collection検索機能を使用すると、常にfalseが返されます。Laravel Eloquent Collection Searchは常にfalseを返します

コード:

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

出力:false

出力DD($エントリー):

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 ▶} 
    ] 
} 

恐ろしいの書式設定のため申し訳ありません。

+0

はあなた 'DD($エントリー)'とは、結果を投稿することができますか? – Ian

答えて

0

search()の方法で単純なコレクションを使用する必要があります。あなたが名前を検索したいのであれば、これを行う:それは最初の検索を行いますその後、メモリにすべてのエントリをロードしますので

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

ところで、これは、検索を行うには本当に悪い方法です。あなたは全体の名前を検索したい場合は

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

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

それとも単に:

Aより良いアプローチは雄弁またはクエリビルダを使用することです。

+0

名前列でのみ検索したいのですが、1つの検索フィールドを使用して、指定したデータのすべてのエントリを検索したいのですが、 – TenTimesCake

+0

@TenTimesCakeは複数の 'orWhere()'節を追加します。すべてのデータを読み込んでから 'search()'コレクションメソッドを使うのはひどい考えです。 –

0

あなたはいつもLaravelコレクションのfilter()機能を使用することができます。

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

選択肢が最初に見つかった、またはsearch()に結果を制限するfirst()関数です。

詳細については、https://laravel.com/docs/5.4/collections#available-methodsを確認してください。

0

あなたのコレクションの価値はありますかJack? f.eではなく。 「ジャック」?

トリックを行う必要がありますドキュメント https://laravel.com/docs/5.4/scout#searching

Entry::search('Jack')->get(); 

によると、カントーのドライバをインストールします。

関連する問題