Comment corriger l'erreur de la Base de la table ou de la vue non trouvé: 1146 Table laravel table de relation?
Je suis un nouveau de laravel j'essaie de créer une relation plusieurs à plusieurs entre la table de Mon problème quand je suis insérer des données dans la base de données j'ai eu des erreurs
QueryException dans Connection.php ligne 713: SQLSTATE[42S02]: Base de table ou de la vue non trouvé: 1146 Table 'apprendre.category_posts' n'existe pas (SQL: insert into category_posts
(category_id
, posts_id
) values (4, ))
quelqu'un peut m'aider pls . et voici ci-dessous mon migrer et code:
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();
});
}
et mon modèle 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');
}
}
Mon 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');
}
Mon point de Vue 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()!!}
learn
table? mysql est à la recherche pour elle et ne peut pas le trouver.J'ai dû le créer
OriginalL'auteur He7nG | 2016-08-04
Vous devez vous connecter pour publier un commentaire.
Il semble Laravel est d'essayer d'utiliser
category_posts
table (en raison de plusieurs-à-plusieurs). Mais vous n'avez pas cette table, parce que vous avez créécategory_post
table. Pour modifier le nom de la table àcategory_posts
.QLSTATE[42S22]: Colonne qui n'a pas trouvé: 1054 Unknown column 'posts_id' in 'field list' (SQL: insert into
category_posts
(category_id
,posts_id
) values (2, ))Encore une fois, vous avez
post_id
colonne, mais Laravel recherche 'posts_id", parce que votre modèle estPosts
, pasPost
. Vous pouvez renommer le modèle dePost
, puis définissez nom de la table de retour à lacategory_post
et de garderpost_id
à vous de tableau croisé dynamique.J'ai essayer de les corriger, et mon dernier erreurs ici
QueryException dans Connection.php ligne 713: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'posts_id' ne peut pas être null (SQL: insert into
category_posts
(category_id
,posts_id
) values (2, ))OriginalL'auteur Alexey Mezenin
Laravel essaie de deviner le nom de la table, vous devez le spécifier directement, de sorte qu'il ne vous donne pas cette erreur..
Essayez ceci:
J'espère que ça aide!
OriginalL'auteur jpasosa
La chose la plus simple à faire, modifier la valeur par défaut de la table de nom pour le modèle. Simplement mettre de code suivant,
protected $table = 'category_posts';
au lieu deprotected $table = 'posts';
puis il va faire l'affaire.Cependant, si vous vous référez Laravel de la documentation que vous trouverez la réponse. Voici ce qu'il dit,
Mieux pour vous d'utiliser artisans commande de faire le modèle et le fichier de migration dans le même temps, utilisez la commande suivante,
php artisan make:model Test --migration
Cela permettra de créer un modèle de classe et une classe de migration dans votre Laravel projet. Disons qu'il a créé les fichiers suivants,
Test.php
2018_06_22_142912_create_tests_table.php
Si vous regardez le code dans les deux fichiers que vous allez voir,
2018_06_22_142912_create_tests_table.php des fichiers de la fonction,
Ici, il code automatiquement généré avec le nom de la table de "tests" qui est le pluriel nom de la classe qui est en Test.php fichier.
OriginalL'auteur Chathura D Ranathunga
Vous devriez changer/ajouter dans votre PostController: (et de changer PostsController à PostController)
PS: l'utilisation de la route() signifie que vous avez nommé votre parcours en tant que tel
Mise à JOUR
Les commentaires ci-dessus sont également le droit, de modifier vos "Posts" Modèle "Post"
OriginalL'auteur Steven Grauwmans
Vous pouvez simplement régler le problème en ajoutant ceci dans Modèle Post,
category_post
indiquer la table que vous souhaitez utiliser.post_id
indiquer la colonne où vous souhaitez stocker les postes id.category_id
indiquer la colonne où vous souhaitez stocker les catégories id.OriginalL'auteur Anand Mainali
Le principal problème de l'origine de votre table incapables de migrer, c'est que vous avez en cours d'exécution de la requête sur votre "AppServiceProvider.php" essayez de vérifier votre
serviceprovider
et le code de désactivation pour l'instant, et d'exécuterphp artisan migrate
OriginalL'auteur Aldrin Masamoc Mojica
Schema::table
est de modifier une table existante, utilisezSchema::create
pour créer de nouveaux.OriginalL'auteur Shal