前提・実現したいこと
Laravel 6系を使用しています。
今回、問い合わせ画面を作成するにあたり、「都道府県」のセレクトボックスを作成することになりました。
セレクトボックスの中身(「北海道」など)はDBに保存しています。
そこで、問い合わせテーブル「contacts」に「pref_id」という外部キーを設けて、都道府県テーブル「prefectures」とリレーションを持たせようとしているのですが、問い合わせ情報を取得するときに都道府県の内容が取得できないくて困っています
該当のソースコード
「都道府県」のマスタテーブルを作成するマイグレーションファイル
php:
1<?php 2 3use Illuminate\Database\Migrations\Migration; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Support\Facades\Schema; 6 7class CreatePrefecturesTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('prefectures', function (Blueprint $table) { 17 $table->increments('id'); 18 $table->integer('code')->default(0); 19 $table->text('name'); 20 }); 21 } 22 23 /** 24 * Reverse the migrations. 25 * 26 * @return void 27 */ 28 public function down() 29 { 30 Schema::dropIfExists('prefectures'); 31 } 32}
「問い合わせ」のテーブルを作成するマイグレーションファイル
php:
1<?php 2 3use Illuminate\Database\Migrations\Migration; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Support\Facades\Schema; 6 7class CreateContactsTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('contacts', function (Blueprint $table) { 17 $table->increments('id'); 18 $table->timestamps(); 19 $table->string('first_name'); 20 $table->string('last_name'); 21 $table->string('email'); 22 $table->string('job_title'); 23 $table->string('city'); 24 $table->string('country'); 25 $table->unsignedInteger('pref_id'); 26 $table->foreign('pref_id')->references('id')->on('prefectures'); 27 }); 28 } 29 30 /** 31 * Reverse the migrations. 32 * 33 * @return void 34 */ 35 public function down() 36 { 37 Schema::dropIfExists('contacts'); 38 } 39}
試したこと
「お問い合わせ」のモデルにbelongsToを定義しました。
php:
1<?php 2 3namespace App\Models; 4use Illuminate\Database\Eloquent\Model; 5 6class Contact extends Model 7{ 8 protected $fillable = [ 9 'first_name', 'last_name', 'email', 'city', 'country', 'job_title', 'pref_id', 10 ]; 11 public function prefecture(){ 12 return $this->belongsTo('App\Models\Prefecture'); 13 } 14} 15
問い合わせのコントローラで全件データを取得しました。
php:
1class ContactController extends Controller 2{ 3 /** 4 * Display a listing of the resource. 5 * 6 * @return \Illuminate\Http\Response 7 */ 8 public function index() 9 { 10 $contacts = Contact::all(); 11 var_dump($contacts); 12 return view('contacts.index', compact('contacts')); 13 }
上記のように。var_dumpで全件確認してみたのですが、「お問い合わせ」のモデルでbelongsToした情報が取れないです。
データも登録されているのですが、リレーションの使い方に誤りがあるのでしょうか?
ご回答お願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/19 06:36