2017-02-11 2 views
-1

ausgeführt wurde habe ich die folgende Migration in meinem Laravel Migrationen Ordnern, ich habe bereits laufen:nach der Migration hat in Laravel

<?php 

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreateAdminTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() { 
     Schema::create('Admin' , function($table){ 
      $table->increments('id'); 
      $table->mediumText('title'); 
      $table->text('blog_content'); 
      $table->char('tag' , 15); 
     }); 
    } 
    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() { 
     Schema::drop('Admin'); 
    } 
} 

Die obige Migration ist für meinen admin Tisch, was würde ich wirklich gerne tun ist ein Fremdschlüssel in meiner admin Tabelle, die mit meiner tags Tabelle zugeordnet ist. etwas wie:

Wie mache ich das jetzt, dass ich meine Migration bereits ausgeführt habe ??

EDIT :: habe ich versucht, die folgen:

Schritt 1: löschte die tag Spalte aus der admin Tabelle von phpMyAdmin.

SCHRITT 2: Versucht, die nach der Migration ausgeführt wird:

<?php 

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class AddForeignKeyTagsColumn extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::table('Admin', function (Blueprint $table) { 
      $table->char('tag' , 15)->after('slug'); 
      $table->foreign('tag')->references('tag')->on('tags'); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     // Schema::drop('Admin'); 
    } 
} 

aber ich bekomme die folgende Fehlermeldung:

enter image description here

Warum ist der Fremdschlüssel nicht in der Lage geschaffen werden ??

Vielen Dank.

+0

In Bezug auf Ihre bearbeiten laufen. Codiert Ihr Tisch myisam/innodb?Versuchen Sie es in innodb zu ändern, da myisam keine Fremdschlüssel unterstützt. – Gravy

+0

@Gravy änderte folgendes in config/database.php ''engine' =>" InnoDB ",' .. gelöscht und alle Tabellen neu erstellt, aber ich bekomme immer noch den Fehler, dass ' SQLSTATE [HY000]: Allgemeiner Fehler: 1215 kann nicht Fremdschlüssel hinzufügen tag_foreign' Fremdschlüssel ('tag') verweist auf' tags' ('tag')' '. –

Antwort

1

Migrationen sind Versionskontrolle für Ihre Datenbank. Es hat keinen Sinn, Migrationen zu schreiben, wenn Sie nicht beabsichtigen, die Versionskontrollfunktionalität zu verwenden.

So einfach können Sie die Tabelle ändern, indem Sie eine neue Migration ... von der Kommandozeile zu erstellen:

php artisan make:migration alter_table_admin_add_foreign_tag

Dann in Ihrer neuen Migration, tun Sie nach oben und unten Methoden.

Sobald Ihre Migration fertig ist, php artisan migrate.

EDITED Frage zu:

Beide Tabellen müssen myisaminnodb und nicht sein. Außerdem müssen beide Spalten, Elternschlüssel und Beziehungsschlüssel, den gleichen Datentyp haben. Als solche auch in Ihrer tags Tabelle mit $table->char('tag' , 15);

SIDE HINWEIS/Anregung konfiguriert ist:

Warum haben Sie einige Tabellen Singular und Plural einige. und warum haben Sie einige Tabellen mit einem Großbuchstaben und andere Tabellen in Kleinbuchstaben? Admin könnte admins und tags könnte tags für die Konsistenz bleiben.

+0

Ich änderte die Tabellen, innodb zu sein, fügte ich auch die gleichen Datentypen für 'tag' feild hinzu, immer noch nicht in der Lage, den Fremdschlüssel zu erstellen, bekomme ich immer noch einen Fehler http://imgur.com/a/AWunG –

+0

ist Ihr Tabellenname' Admin' oder 'Admin'? – Gravy

-1

Erstellen Sie eine neue Migration mit dem folgenden Code:

public function up() { 
    Schema::table('Admin' , function($table){ 
     $table->foreign('tag')->references('tag')->on('tags'); 
    }); 
} 

public function down() { 
    Schema::table('Admin' , function($table){ 
     $table->dropForeign('Admin_tag_foreign'); 
    }); 
} 

Dann php artisan migrate

+0

Warum der Downvote? – Paras