LaravelでbelongsToManyによるテーブルの連携ができず力をお借りしたいです。
現在掲示板アプリを作成していて、「いいね」機能を実装しようとしています。
belongsToManyでのDBを連携する方法についての解決策をお聞きしたいです。
####利用環境
macOS Catalina 10.15.6
Laravel 7.21.0
MAMP Version5.7
・テーブル
usersテーブル(利用者)
boardsテーブル(投稿)
そして中間テーブルにlikesテーブルを作りました。
カラムは以下のとおりです。
users | |
---|---|
id | |
name | |
password |
boards | |
---|---|
id | |
user_id | |
title | |
message |
likes | |
---|---|
id | |
user_id | |
board_id | |
message |
####リレーション方法
いいね機能を付ける前はusers,boardsテーブルをhasMany,belongsToメソッドを使い一対多で問題なく連携できていました。
しかし、likesテーブルを作り以下のようにbelongsToManyで連携しようとしましたところエラーになりました。
hasManyやbelongsToで動いていたのでbelongsToManyに変更したせいで、他で変更するべき部分があるのかと思い調べましたが、事例が見つからず困っております。
####エラーコードです
Illuminate\Database\Eloquent\RelationNotFoundException Call to undefined relationship [user] on model [App\Board]. http://localhost:8000/boards
この関係が定義されていないと言われているuserはコントローラーにあります。↓↓
####コントローラー
class BoardController extends Controller { public function index() { $boards = Board::with('user')->get(); return view('boards.index',compact('boards')); } }
####ルーティング
Route::resource('/boards', 'BoardController');
モデルです。
- User.php
public function boards(){ return $this->belongsToMany('App\Board','likes'); }
- Board.php
public function users() { return $this->belongsToMany('App\User','likes'); }
- Like.php(空です)
class Like extends Model { // }
マイグレーションです
- xxxx_create_users_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->timestamps(); }); }
- xxxx_create_boards_table.php
public function up() { Schema::create('boards', function (Blueprint $table) { $table->id(); $table->integer('user_id'); $table->string('title'); $table->string('message'); $table->timestamps(); }); }
- xxxx_create_likes_table.php
public function up() { Schema::create('likes', function (Blueprint $table) { $table->id(); $table->bigInteger('board_id')->unsigned(); $table->bigInteger('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->foreign('board_id')->references('id')->on('boards')->onDelete('cascade'); $table->timestamps(); }); }
分かりづらい点があれば追記します。
宜しくおねがいします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/27 09:20
2020/07/27 12:41
2020/07/28 10:20
2020/07/28 10:25