ログイン認証機能を実装しました。そこで新たにSitesテーブルというのを作り、多対多のリレーションを結ぼうとしたのですが、中々うまくいきません。
多対多のリレーションについては何度も実装したことがあります。
自動生成されたUsersテーブルと私が作ったSitesテーブルを紐づけるといった場合特別な記述が必要だったりするのでしょうか?
必要な情報が足りてない場合すぐに追記致します
User.php
public function sites() { return $this->belongsToMany('App\Models\Site'); }
Site.php
public function users() { return $this->belongsToMany('App\Models\User'); }
テーブル構成
Sites テーブル
id bigint unsigned 連番
site_name varchar(255)
Usersテーブル
id bigint unsigned 連番
name varchar(255)
中間テーブル
id bigint unsigned 連番
site_id bigint unsigned
user_id bigint unsigned
結果
user_id 23は存在します。
User::find(23)->sites
=> Illuminate\Database\Eloquent\Collection {#4388
all: [],
}
試したこと
変更前のコード // public function store( // Request $request, // CreatesNewUsers $creator // ): RegisterResponse { // event(new Registered($user = $creator->create($request->all()))); // return app(RegisterResponse::class); // } 自分のコード public function store(Request $request) { $user = new User; $user->name = $request->name; $user->store_code = $request->store_code; $user->staff_name = $request->staff_name; $user->max_cast = $request->max_cast; $user->email = $request->email; $user->password = $request->password; $user->save(); $user->sites()->attach($request->site_id); return redirect()->route('store.index'); }
マイグレーションファイル
site_user_table.php
*/ public function up() { Schema::create('site_user', function (Blueprint $table) { $table->id(); $table->timestamps(); }); }
add column site_user table php
*/ public function up() { Schema::table('site_user', function (Blueprint $table) { $table->unsignedBigInteger('user_id'); $table->unsignedBigInteger('site_id'); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->foreign('site_id')->references('id')->on('sites')->onDelete('cascade'); }); }
user table php
public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->foreignId('current_team_id')->nullable(); $table->text('profile_photo_path')->nullable(); $table->timestamps(); }); }
site table php
public function up() { Schema::create('sites', function (Blueprint $table) { $table->id(); $table->string('site_name'); $table->string('site_url'); $table->boolean('delete_flg'); $table->softDeletes(); $table->timestamps(); }); }
回答2件
あなたの回答
tips
プレビュー