質問: $user->hobbies(); // ~\Eloquent\HasManyインスタンス(?) ``` この3つ目の$bbbに格納されているHasManyインスタンス(?)というものがよく分かりません。 ちなみにきっかけは$user->hobbies()->fill()のようにfill()が使えなかったので、 (ただ、$user->hobbies()->create()は使える) デバッグしてHasManyインスタンス(?)らしきものを見つけました。 ただ、調べていたのですが、どうもHasManyインスタンス(?)がなにものなのか、 ここの部分をピンポイントで説明してくれているサイトがなかったのでこちらで質問を致しました。 わかる方がいらっしゃればご教授お願い致します。
回答: 以下のクラス名が何なのかという点と テーブル定義の情報がないので説明以前の問題かもしれません。 public function hobbies() public function people() 情報の追記などがあると記述の指摘などをしてくれる人がいるかもしれないですね。 ドキュメントの1対多を参照 https://readouble.com/laravel/5.5/ja/eloquent-relationships.html#one-to-many 親から子のモデルを1対多で使えるようにするなら 以下のようなモデルのクラスになるかとおもいます。 ex.) ``` hasMany('App\Hobby'); } } ``` Hobbyのテーブルにはperson_idの外部キーがあること。 PersonテーブルのidとHobbyテーブルのperson_idが一致するデータを hobbies()関数を実行すると取得できるという解釈でいいと思います。 コントローラーで利用するときには以下のような使い方 ``` // 使い方Aパターン use App\Person; // クラス外に記述し以下のような書き方をする $hobbies = $person->hobbies()->where('name', 'me')->first(); // 使い方Bパターン $hobbies = App\Person::find(1)->hobbies()->where('name', 'me')->first(); ``` ひとつひとつの記述をおおまかに書きましたが参考まで。 もう少し情報があると詳しく説明してくれる人がいるかも。 何がやりたくてどのように記述すればいいのかという点を突き詰めるといいと思います。