Object内の検索を配列関数でいこうとして怒られる
Laravel初心者です。
コントローラーから、
return view('home',compact('data','data2'));
のように、値をViewへ渡せるのは便利でウキウキでした。
(最初は、コントローラーからViewへ値を渡す方法が面倒、かつ、よくわからなかったので、
compactが超便利で感動)
しかし、DBからのデータをViewへ渡した場合、配列を渡したと思っていたのに、
実際渡されていたのはObject。
こいつの処理にしばし悩みました。
例えば、配列のある列の中に、ある値があるかを、
$key = array_search('taro', array_column($data, 'name'));
var_dump($key);
みたいに探したかったわけです。
しかし無情にも、「Objectなんだから配列じゃねえ」とLaravelは言う。
( array_column() expects parameter 1 to be array, object given )
切ない。
しばし悩んで、「コレクション」にたどり着きました。
コレクション、便利やん
「じゃあ、どうすりゃいいの?」となりましたが、たどり着いたのが以下のページ。
https://readouble.com/laravel/5.7/ja/collections.html
コレクションのメソッド群も、調べてみると超便利。
https://readouble.com/laravel/5.7/ja/collections.html#collection-method-list
一瞥して、かなりてんこ盛り感あります。
最終的に、下のような感じでcontainsメソッドを使い、
@if($data->contains("name","taro"))
{{$data->name}}//プロパティへのアクセスは、矢印+プロパティ名
@endif
こんな感じで、望む処理が書けました。
これからも、LaravelでObject処理に困ったら、
このページ見ながら、便利な道具を使わせてもらいましょかと。
ありがたし。