1. ホーム
  2. laravel

[解決済み] エラーベーステーブルまたはビューが見つかりませんを修正する方法:1146テーブルlaravelの関係テーブル?

2022-02-02 16:50:48

質問

私はlaravelの新しいです私はテーブル間の多対多の関係を作成しようとして、私の問題は私がデータベースにデータを挿入するとき、私はエラーが発生しました。

QueryException in Connection.php line 713: SQLSTATE[42S02]: ベースとなるテーブルまたはビューが見つかりません:1146 テーブル 'learn.category_posts' が存在しません(SQL:insert into category_posts ( category_id , posts_id ) の値 (4, ))

そして、以下は私のマイグレートとコードです。

2016_08_04_131009_create_table_posts.php

public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->increments('id');
        $table->text('title');
        $table->text('body');
        $table->timestamps();
    });
}

2016_08_04_131053_create_table_categories.php

public function up()
{
    Schema::create('categories', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->timestamps();
    });
}

2016_08_04_131413_create_table_category_posts.php

public function up()
{
    Schema::create('category_post', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('category_id')->unsigned();
        $table->integer('post_id')->unsigned();
        $table->foreign('category_id')->references('id')->on('categories')->onUpdate('cascade')->onDelete('cascade');
        $table->foreign('post_id')->references('id')->on('posts')->onUpdate('cascade')->onDelete('cascade');
        $table->timestamps();
    });
}

と私のモデル Posts.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Posts extends Model
{
    protected $table = 'posts';

    public function categories()
    {
        return $this->belongsToMany('App\Category');
    }
}

カテゴリ.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories'; 

    public function posts()
    {
        return $this->belongsToMany('App\Posts');
    }   
}

私のPostsController.php

public function create()
{
    $categories = Category::all();
    return view('create',compact('categories'));
}

public function store(Request $request)
{
   $post = new Posts;
   $post->title = $request->title;
   $post->body = $request->body;
   $post->categories()->attach($request->categories_id);

    return redirect()->route('posts.index');
}

マイビュー create.blade.php

{!!Form::open(array('route' => 'store', 'method' => 'POST'))!!}

    {{Form::text('title')}}<br>
    {{Form::textarea('body')}}<br>
    <select name="categories_id" multiple>
        @foreach ($categories as $category)
            <option value="{{ $category->id }}">{{ $category->name }}</option>
        @endforeach
    </select>
    <br>
    {{Form::submit('submit')}}

{!!Form::close()!!}

解決方法は?

Laravelは category_posts テーブルを使用します (多対多の関係のため)。しかし、あなたはこのテーブルを持っていません。 category_post テーブルを作成します。テーブルの名前を category_posts .