前提・実現したいこと
Laravelで図書館で借りた本をユーザが確認できる様なものを作成しています。
その際にユーザの情報を保存するusersテーブル
と本の一覧を保存するbooksテーブル
があり、それらの借りた履歴を保存する中間テーブルのbook_userテーブル
があるのですが、この時どの様にbook_userテーブル
にデータを入れるのでしょうか?
【Laravel】多対多の中間テーブルのモデルはPivot化するとアクセスしやすくなりメソッドを使いやすい
の記事を見たところ中間テーブルのModelは不要だと以下の様に書いていましたが、その場合どの様にすれば良いのかがわかりませんので分かる方に教えていただきたいです。????
また同様に借りた履歴をDBにデータを挿入したいときどのModelを指定すれば良いのでしょうか?
そもそもリレーションの部分が間違っている可能性もあるかと思うのでそちらも確認していただきたいです。。何卒よろしくお願いします。
中間テーブルのモデルにメソッドを持たせていて、それを使いたい場合に便利です。
該当のソースコード
create_users_table.php (特に変えていません!)
PHP
1 $table->id(); 2 $table->string('name'); 3 $table->string('email')->unique(); 4 $table->timestamp('email_verified_at')->nullable(); 5 $table->string('password'); 6 $table->rememberToken(); 7 $table->timestamps();
create_books_table.php
PHP
1<?php 2 3use Illuminate\Database\Migrations\Migration; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Support\Facades\Schema; 6 7class CreateBooksTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('books', function (Blueprint $table) { 17 $table->id(); 18 $table->char('book_name'); 19 $table->bigInteger('book_price'); 20 $table->text('book_detail'); 21 $table->timestamps(); 22 }); 23 } 24 25 /** 26 * Reverse the migrations. 27 * 28 * @return void 29 */ 30 public function down() 31 { 32 Schema::dropIfExists('books'); 33 } 34} 35
create_book_user_table.php
PHP
1<?php 2 3use Illuminate\Database\Migrations\Migration; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Support\Facades\Schema; 6 7class CreateBookUserTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('book_user', function (Blueprint $table) { 17 $table->id(); 18 $table->unsignedBigInteger('user_id'); 19 $table->unsignedBigInteger('book_id'); 20 $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 21 $table->foreign('book_id')->references('id')->on('books')->onDelete('cascade'); 22 $table->timestamps(); 23 }); 24 } 25 26 /** 27 * Reverse the migrations. 28 * 29 * @return void 30 */ 31 public function down() 32 { 33 Schema::dropIfExists('book_user'); 34 } 35} 36
App\User.php (追加した部分)
PHP
1 public function books(){ 2 return $this->belongsToMany("App\Book"); 3 }
App\Book.php
PHP
1 <?php 2 3 namespace App; 4 5 use Illuminate\Database\Eloquent\Model; 6 7 class Book extends Model 8 { 9 protected $table = "books"; 10 11 protected $fillable = [ 12 'book_name', 'book_price', 'book_detail', 13 ]; 14 15 public funciton users(){ 16 return $this->belongsToMany("App\User"); 17 } 18 } 19
試したこと
上記コードで試してみました
補足情報(FW/ツールのバージョンなど)
Laravel 7.28.1
回答3件
あなたの回答
tips
プレビュー