2016-08-04 17 views
3

私は私は私がエラーエラーを修正する方法ベーステーブルまたはビューが見つかりません:1146テーブルラーベル関係テーブル? SQLSTATE [42S02]:

Connection.phpライン713で

QueryExceptionを得たデータベースにデータを挿入していたときに、テーブルの間に多くの多くの私の問題を関係を作成しようlaravelの新しい午前ベーステーブルまたはビューが見つかりません:誰もがplsは私を助けることができる

:(category_postscategory_idposts_id)の値(4)に挿入するSQLを)1146テーブル 'learn.category_posts' が存在しません。そして、ここで以下の私の移行とコードです:

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'); 
    } 
} 

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()!!} 
+0

'learn'テーブルを作成しましたか? mysqlはそれを探していて見つけられません。 –

+0

私はそれを作成しました – He7nG

答えて

1

Laravelはcategory_postsテーブルを使用しようとしているようです(多対多関係のため)。しかし、category_postテーブルを作成したので、このテーブルはありません。テーブルの名前をcategory_postsに変更します。

+0

変更をお待ちしています。 – He7nG

+0

QLSTATE [42S22]:列が見つかりません:1054 'フィールドリスト'に未知の列 'posts_id'(SQL:category_posts( 'category_id'、' posts_id')値に挿入(2、)) – He7nG

+0

また、あなたの 'post_id'カラムはありますが、あなたのモデルは' Post'ではなく 'Post'ですので、Laravelは 'posts_id'を探します。モデルの名前を 'Post'に変更し、テーブル名を' category_post'に戻し、 'post_id'をピボットテーブルに保持することができます。 –

0

あなたのPostControllerを追加/変更する必要があります(とのPostControllerにPostsControllerのを変更)

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

public function store(Request $request) 
{ 
    $post = new Posts; 
    $post->title = $request->get('title'); // CHANGE THIS 
    $post->body = $request->get('body'); // CHANGE THIS 
    $post->save(); // ADD THIS 
    $post->categories()->attach($request->get('categories_id')); // CHANGE THIS 

    return redirect()->route('posts.index'); // PS ON THIS ONE 
} 

PS:(ルートを使用しては)あなたは、このような

Route::get('example', '[email protected]')->name('getExample'); 

UPDATEとしてあなたのルートを命名した意味します

上記のコメントも正しく、「投稿」モデルを「投稿」に変更してください

2

Laravelは、テーブルの名前を推測しようとすると、あなたはそれがあなたにそのエラーを与えないように、それを直接指定する必要があります。..

はこれを試してみてください:

class NameModel extends Model { 
    public $table = 'name_exact_of_the_table'; 

私はそれが役に立てば幸い!

関連する問題