2017-05-08 3 views
0

単一雄弁オブジェクトを返す:は私はこの機能を有しLaravel

protected function compare_something($found_item, $saved_items) 
{ 
foreach($saved_items as item) { 

$compare_x = false; 
$compare_y = false; 
$compare_z = false; 

$compare_x = strpos($found_item,$item->x) !== false ? true: false; 
$compare_y = strpos($found_item,$item->y) !== false ? true: false; 
$compare_z = strpos($found_item,$item->z) !== false ? true: false; 

if($compare_x && $compare_y && $compare_z){ 
return $item; 
} 

} 
return false; 
} 

Iは$item$compare_x, $compare_y$compare_zに該当するオブジェクトであることを期待しかし、この関数は単に全体雄弁オブジェクト($saved_items)を返す代わりに比較されたもの。

なぜこのようなことが起こっているのかわかりません。私はいつも返すことができます。その後、

$item->id 

などを行うItem::where("id",$item->id)->first();

しかし、だけではなく、単に私に選ばれたアイテムをお届け$itemを返す必要がありますか?

+0

あなたは 'Eloquent'項目のリストを持っている場合、それらは便利'フィルタ() '関数を持っている' Collection'、として保存されます: https://laravel.com/docs/5.4/collections#method-filter(Laravelのバージョンに基づいてわずかな構文の変更に注意してください)。 –

答えて

3

奇妙なクエリは常にコレクションを返します。このため、関数を簡単に使用できます。その呼び出しの後にfirst関数は、最初の要素を取得します。コレクションに要素がない場合は、nullが返されます。例えば

:サイドノートとして

return $saved_items->filter(function ($item) use ($found_item) { 
    return strpos($found_item, $item->x) !== false && 
      strpos($found_item, $item->y) !== false && 
      strpos($found_item, $item->z) !== false; 
})->first(); 
+1

また、(filter()の代わりに)同じ関数で 'first()'を使うと同じ結果が得られます。 (https://laravel.com/docs/5.4/collections#method-first) –

関連する問題