Czy ta tabela jest poprawna? czy też powinienem wstawić unsignedBigInteger
dla tag_id
? i usunąć .->unsigned
i index
?
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('post_tags', function (Blueprint $table) {
$table->unsignedBigInteger('post_id');
$table->integer('tag_id')->unsigned()->index();
$table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('post_tags');
}
3 odpowiedzi
Spróbuj tego
Schema::create('post_tags', function (Blueprint $table) {
$table->integer('tag_id')->unsigned();
$table->integer('post_id')->unsigned();
$table->foreign('tag_id')->references('id')->on('tags')
->onDelete('cascade');
$table->foreign('post_id')->references('id')->on('posts')
->onDelete('cascade');
});
Tabela nie jest poprawna. Nazwa na początek. Wydaje mi się, że jest to tabela asocjacyjna między posts
a tags
. Wtedy powinny to być nazwy post_tag
(liczba mnoga jest usuwana w przypadku asocjacji).
Więc dlaczego dwie różne składnie?
$table->unsignedBigInteger('post_id');
$table->integer('tag_id')->unsigned()->index();
Albo użyjesz unsignedInteger(...)
, albo integer(...)->unsigned()
. Nie oba. Technicznie rzecz biorąc, nie jest to złe, ale nie jest to dobra praktyka; wybrał składnię i ją zachował.
Następnie: unsignedBigInteger
, unsignedInteger
, unsignedSmallInteger
... Ważny jest typ klucza podstawowego, do którego się odnosi. Jeśli w Twojej tabeli tags
jest bigInteger
, to używasz unsignedBigInteger
i tak dalej.
W przypadku klucza obcego należy użyć następującego:
$table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
$table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
Tam twoja tabela powinna być poprawna.
Edycja: nie ma potrzeby timestamps()
w tabeli asocjacyjnej, chyba że chcesz śledzić zmiany. Ale bardziej zalecane jest posiadanie tabeli dziennika. Możesz opuścić linię.
blogapp
.category_posts
(errno: 150 "Ograniczenie klucza obcego jest nieprawidłowo utworzone") (S QL: alter table category_posts
dodaj ograniczenie category_posts_post_id_foreign
klucz obcy (post_id
) referencje posts
(id
) przy usuwaniu kaskadowym)
category_posts
nazwa jest nieprawidłowa. Powinien być category_post
. Jaki jest typ identyfikatora w posts.id
? Jeśli jest to bigIncrements lub smallIncrements, to normalne, że pojawia się ten błąd, a typ nie jest taki sam.
/ ** * Uruchom migracje. * * @return void * / public function up () {Schema :: create ('post_tags', function (Blueprint $ table) {$ table-> unsignedInteger ('post_id'); $ table-> unsignedInteger ('tag_id') ; $ table-> Foreign ('post_id') -> reference ('id') -> on ('posts') -> onDelete ('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('post_tags');
}
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.