はじめに
こんにちは、未経験からエンジニア転職を目指しているものです。
オンラインスクールで本格的に学習して7ヶ月目に入りました。
PHP,Laravelを学習しポートフォリオを作成中です。
今回は、Postモデルに紐づいているMapInfoモデルのリレーションの問題を解決するためにトライした内容を整理しました。
概要
Laravel Sailを使った開発環境で、Google Maps APIを利用して地図を描画しました。
新規投稿作成画面に、地図情報が反映されるようになりましたが、
PostモデルとMapInfoモデルが紐づいた事で、以下の問題が発生しました。
- 投稿した内容が、投稿一覧に反映されず、ERR_EMPTY_RESPONSEが発生
今回は、その問題を解決するためにトライした8つの事を紹介致します。
具体的にどのように解決したかは、下記を参照下さい。
トライ①: PostController.phpのindexメソッドを変更
- 実行内容: コントローラーの動作確認用に単純な文字列を返すreturn "Post Index is working."を設定
- 結果: 正常に表示された
- 考察: PostController自体に問題がないことを確認。この時点で問題 の範囲がビューかデータベースに絞られた
トライ②: マイグレーションファイル、モデル、データベースが一致しているか確認
- 実行内容: マイグレーションとモデル構造の整合性を確認
- 結果: 一致しており問題なし
- 考察: モデルやマイグレーションに問題がないため、エラーの原因が他にあると確定
トライ③: ルート設定の確認
- 実行内容: ルート設定とリクエストURLの確認
- 結果: 問題なし
- 考察: ルートの設定が正しいため、エラー原因はルート外にあると判明
トライ④: ネットワークタブでの解析
- 実行内容: ブラウザのデベロッパーツールでリクエストとレスポンスを確認
- 結果: ステータスコード302やリクエストサイズ0 Bが確認された
- 結びつき: リダイレクトやタイムアウトが発生している可能性を示唆し、データベースやビューの問題を特定する必要性が浮上
トライ⑤: ビューの最低限の内容でテスト
- 実行内容: 最小限のHTMLのみでindex.blade.phpを作成してテスト
- 結果: 表示されない
- 結びつき: ビューではなくデータ取得や関連付けの問題が原因と判明
トライ⑥: Postモデルのfillableやguardedの確認
- 実行内容: モデルに渡されるデータが適切か確認
- 結果: 問題なし
- 結びつき: モデルの設定が原因ではないことを確認
トライ⑦:データベースにデータが存在するがERR_EMPTY_RESPONSEが発生
- 実行内容: $mapInfo->activity_location ?? 'データなし'で関連データの確認。
- 結果: 一部関連データが存在せずエラーを引き起こしていると判明。
- 結びつき: データ関連付けが不完全である可能性を指摘。
トライ⑧: ページネーションの影響を調査
- 実行内容: ページネーションを無効化してデータ取得。
- 結果: ページネーションに問題なし。
- 結びつき: ページネーション設定は問題ではないため、データ量の問題ではない事を推測
まとめ
上記トライを実施したことで、原因がデータ関連付け辺りにある事が判明しました。
結果的に、問題の原因はEager Loadingと関連付けデータの不完全性にありました。
関連データの取得方法を状況に応じて調整することが重要だと実感しました。
最後まで、ご視聴頂きありがとうございます。