

laravelで以下のようなテーブルが３つあるとして  
レポートの一覧を出力する際に部署名（section_name）を表示したい場合は  
どのようにすればよいのでしょうか？

▼社用車レポートテーブル  
**CarReport**

[code]

    report_id
    car_id
    report_data
    ....
    
[/code]

▼社用車テーブル  
**Car**

[code]

    car_id
    car_name
    section_id
    ....
    
[/code]

▼部署テーブル  
**Section**

[code]

    section_id
    section_name
    
[/code]

現在は以下のようなコードを記述していますが  
正常に表示されません。。

[code]

    class CarReport extends Model
    {
        public function carsection()
        {
            return $this->hasManyThrough('App\Car', 'App\Section','section_id','car_id');
        }
    ...........
    
[/code]


CC BY-SA 4.0
2017-12-22T08:25:06.977
40479
2020-11-11T03:04:35.447
2019-12-02T12:08:25.713
35461
26236
question
php laravel
laravelのリレーションについて


それぞれのデータの関係性が分からないので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');`

これでどうでしょう？


CC BY-SA 3.0
2018-01-12T02:02:54.437
40898
2018-01-12T02:18:15.280
2018-01-12T02:18:15.280
3060
26963
40479
answer