я следующая миграцию в моей папке Laravel кочевок, что я уже запускал:Добавить внешний ключ к таблице после того, как миграция была запущена в 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');
}
}
выше миграция моей admin
таблицы, то, что я бы Очень нравится делать, это добавить внешний ключ в мою таблицу admin
, связанную с моей таблицей tags
. что-то вроде:
$table->foreign('tag')->references('tag')->on('tags');
Как это сделать сейчас, когда я уже выполнил миграцию?
EDIT :: Я попытался следовать:
ШАГ 1: удалил tag
столбец из таблицы admin
из PhpMyAdmin.
ШАГ 2: Пытался выполнить следующую миграцию:
<?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');
}
}
Но я получаю следующее сообщение об ошибке:
Почему внешний ключ не может быть создан ??
спасибо.
Что касается вашего редактирования. Является ли ваша таблица кодировкой myisam/innodb?попробуйте изменить его на innodb, поскольку myisam не поддерживает внешние ключи. – Gravy
@Gravy изменил следующее в config/database.php ''engine' =>« InnoDB »,' .. удалил и воссоздал все таблицы, но я все еще получаю ошибку, что ' SQLSTATE [HY000]: Общая ошибка: 1215 Can not добавить внешний ключ Заключительный ключ tag_foreign' ('tag') указывает' tags' ('tag'))'. –