yuktkhs
@yuktkhs (yuki takahashi)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

[laravel]多対多のリレーション(中間テーブル)ができない

解決したいこと

初心者です。

php laravelにて、日記アプリを作成中です。
投稿の際に複数タグをつけられるようにするため、中間テーブルを作成して多対多の
紐付けを行なってデータを呼び出したいです。

diaryとlessonは互いに複数データを持てます

発生している問題・エラー

中間テーブルにデータがない(カラムがない?)
https://gyazo.com/a450f1f205fdc767471a97b0fc30ce99

該当するソースコード

class DiaryController extends Controller
{
    public function add(){
        $songs = Song::all();
        $lessons = Diary::with('lessons')->get();
        return view('admin.diary.create',['songs'=>$songs,'lessons'=>$lessons]);
    }
}
中間テーブルdiary_lesson
  public function up()
    {
        Schema::create('diary_lesson', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedInteger('diary_id');
            $table->unsignedInteger('lesson_id');
            $table->primary(['diary_id', 'lesson_id']);

            $table->timestamps;

            //外部キー制約
            $table->foreign('diary_id')
                ->references('id')
                ->on('diaries')
                ->onDelete('cascade');

            $table->foreign('lesson_id')
                ->references('id')
                ->on('lessons')
                ->onDelete('cascade');


        });

Diaryモデル
class Diary extends Model
{
    protected $guarded = array('id');


    public static $rules = array(
        'date' => 'required',
        'song_id' => 'required',
        'lesson_id' => 'required',
        'impression' => 'required'
        );


    //多対多リレーション定義
    public function lessons(){
        return $this->belongsToMany('App\Lesson');
    }


}

Lessonモデル
class Lesson extends Model
{
    protected $guarded  = array('id');

    public static $rules = array(
        'unit' => 'required',

        );

    //多対多リレーション定義
    public function diaries(){
        return $this->belongsToMany('App\Diary');
    }
}
0

No Answers yet.

Your answer might help someone💌