質問: laravelで以下のようなテーブルが3つあるとして レポートの一覧を出力する際に部署名(section_name)を表示したい場合は どのようにすればよいのでしょうか? ▼社用車レポートテーブル **CarReport** ``` report_id car_id report_data .... ``` ▼社用車テーブル **Car** ``` car_id car_name section_id .... ``` ▼部署テーブル **Section** ``` section_id section_name ``` 現在は以下のようなコードを記述していますが 正常に表示されません。。 ``` class CarReport extends Model { public function carsection() { return $this->hasManyThrough('App\Car', 'App\Section','section_id','car_id'); } ........... ```
回答: それぞれのデータの関係性が分からないのでhasOneの部分は公式ドキュメントを呼んで書き換えてください。 viewやModel、controllerでアクセスしたい場合は取得したDBの値が`$getData`に入っていたと仮定すると `$getData->carsReports->cars->section_name` と書くと部署名が取れます。 正常に表示されないとは具体的にどういうことなのかを書くといいです。 空っぽなのか、エラー画面がでるのか、どういうエラーが出ているのかなど。。 そして、公式ドキュメントをもう少しよく読んでみましょう。laravel5.5から抜粋しましたが > > ・第1引数は最終的にアクセスしたいモデル名で、第2引数は仲介するモデル名です。 > > ・第3引数は仲介モデルの外部キー名、第4引数は最終的なモデルの外部キー名です。 > > > 不具合のソースコードから、CarReportテーブルをスタートと想定しました。 まずCarテーブルからsection_idを取得して、最後にSectionテーブルから部署名を取得する、 という流れになるかと思います。 `return $this->hasManyThrough('App\Section', 'App\Car','car_id','section_id');` これでどうでしょう?