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');
}
-2
Maria Qasim 19 grudzień 2019, 14:59
Podaj więcej informacji o swoim problemie.
 – 
thmspl
19 grudzień 2019, 15:20
Witamy w StackOverflow! Sprawdź, jak zadać dobre pytanie: nie jest jasne, czego chcesz i jaki jest Twój problem.
 – 
Lapshin Dmitry
19 grudzień 2019, 15:33

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

});
0
Vikas Katariya 19 grudzień 2019, 15:09

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ę.

0
Lyzvaleska 19 grudzień 2019, 17:29
: SQLSTATE[HY000]: Błąd ogólny: 1005 Nie można utworzyć tabeli 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)
 – 
Maria Qasim
20 grudzień 2019, 11:32
$table->unsignedInteger('post_id'); $table->unsignedInteger('tag_id'); $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
 – 
Maria Qasim
20 grudzień 2019, 11:32
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.
 – 
Lyzvaleska
20 grudzień 2019, 11:55

/ ** * 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');
}
0
Maria Qasim 20 grudzień 2019, 11:31