PHP
laravel
Object

LaravelのObjectを配列のように使おうとして、「コレクション」に辿りついた

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処理に困ったら、
このページ見ながら、便利な道具を使わせてもらいましょかと。
ありがたし。