Edited at

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処理に困ったら、

このページ見ながら、便利な道具を使わせてもらいましょかと。

ありがたし。