LoginSignup
8
12

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-09-11

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

8
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
12