2014-12-06 3 views
2

Я использую фреймворк Laravel, и я пытаюсь перенести некоторые файлы в базу данных (phpmyadmin), но я получаю эту ошибку: [Illuminate \ Database \ QueryException] SQLSTATE [HY000]: Общая ошибка: 1005 Невозможно создать таблицу 'лоха # SQL-38f_25f. (Errno: 150) (SQL: изменить таблицу encomenda добавить C onstraint encomenda_username_foreign внешнего ключа (username) ссылается users (username))Laravel SQL Не удается создать таблицу

Это мой стол "encomenda":

В сообщении об ошибке говорится, что он не может создать таблицу loja, но нет, где в этом файле есть ссылка на «loja». Я действительно хочу, чтобы создать таблицу «лоха», и на всякий случай, вот код:

<?php 

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

class CreateLojaTable extends Migration { 

/** 
* Run the migrations. 
* 
* @return void 
*/ 
public function up() 
{ 
    Schema::create('loja', function($table) 
    { 
     $table->engine = 'InnoDB'; 
     $table->primary('api_key'); 
    }); 
} 

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

} 

Пользователи таблица миграции:

<?php 
use Illuminate\Database\Migrations\Migration; 

class ConfideSetupUsersTable extends Migration { 

/** 
* Run the migrations. 
* 
* @return void 
*/ 
public function up() 
{ 
    // Creates the users table 
    Schema::create('users', function($table) 
    { 
     $table->engine = 'InnoDB'; 
     $table->increments('id')->unsigned(); 
     $table->string('username')->unique(); 
     $table->string('email'); 
     $table->string('password'); 
     $table->string('confirmation_code'); 
     $table->string('remember_token')->nullable(); 
     $table->boolean('confirmed')->default(false); 
     $table->boolean('admin')->default(false); 
     $table->timestamps(); 
    }); 


    // Creates password reminders table 
    Schema::create('password_reminders', function($table) 
    { 
     $table->engine = 'InnoDB'; 
     $table->string('email'); 
     $table->string('token'); 
     $table->timestamp('created_at'); 
    }); 
} 

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

} 

И вот теперь моя таблица миграции «linhaItem» :

<?php 

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

class CreateLinhaItemTable extends Migration { 

/** 
* Run the migrations. 
* 
* @return void 
*/ 
public function up() 
{ 
    Schema::create('linhaItem', function($table) 
    { 
     $table->engine = 'InnoDB'; 
     $table->increments('IDLinha')->unsigned(); 
     $table->integer('IDDisco')->unsigned(); 
     $table->integer('IDCarrinho')->unsigned(); 
     $table->double('preco'); 
     $table->integer('quantidade'); 
     $table->foreign('IDDisco')->references('IDDisco')->on('disco')->onDelete('cascade'); 
     $table->foreign('IDCarrinho')->references('IDCarrinho')->on('carrinho')-onDelete('cascade'); 
    }); 
} 

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

} 

Кто-нибудь знает, что не так?
EDIT: Я добавил -> onDelete ('каскад') к внешнему ключу, но получаю ту же ошибку.
EDIT2: я добавил unsigned в столбец id в файле «encomenda», но теперь я все еще получаю ту же ошибку, но с миграцией таблицы «linhaItem».

+0

У вас есть таблица 'users', уже созданная до создания' encomenda'? – Kestutis

+0

@ Kestutis да. –

+0

Пожалуйста, добавьте слишком медленную таблицу 'users' – Kestutis

ответ

0

У вас есть несколько вопросов:

  1. users миграция:

    $table->unique('username'); заявление для создания уникального индекса, а не столбец: http://laravel.com/docs/4.2/schema#adding-indexes

    Изменить его к этому: $table->string('username')->unique(); - это добавит для него столбец и уникальный индекс.

  2. encomenda миграция:

    $table->string('username')->unsigned();: unsigned используется только с целыми числами, вы не можете сделать строку без знака.

    Используйте один и тот же код, как и в users миграции: $table->string('username')->unique();

+0

Спасибо за советы. К сожалению, это еще не решило мою проблему:/Я обновлю код –

0

Я решил проблему. Дело в том, что я пытался перенести таблицы, у которых были внешние ключи к таблицам, которые еще не были перенесены. Я просто переименовал все файлы, чтобы поместить их в порядок, который будет работать.

Смежные вопросы