Laravel переносит ошибку отношения один на один - PullRequest
0 голосов
/ 11 мая 2018

У меня вопрос по таблице миграции laravel.У меня есть отношение один к одному между 2 таблицами.OrderLine и билет.Я поместил эти 2 функции в модель Ticket и OrderLine:

public function orderline()
{
    return $this->hasOne('App\OrderLine');

} 

public function ticket()
{
    return $this->hasOne('App\Ticket');
}    

и в файле миграций create_tickets_table Схема:

public function up()
{
    Schema::create('tickets', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('order_line_id')->unsigned(); //foreign key
        $table->string('number');
        $table->float('price');
        $table->timestamps();

        $table->foreign('order_line_id')->references('id')->on('order_lines');//relationship  one to one between orderline & ticket tables
    });
}

и в файле миграций create_order_lines_table Схема:

  public function up()
{
    Schema::create('order_lines', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('ticket_id')->unsigned();//foreign key
        $table->integer('order_id')->unsigned(); //foreign key
        $table->float('total_order_line');
        $table->timestamps();

        $table->foreign('ticket_id')->references('id')->on('tickets');//relationship  one to one between orderline & ticket tables

        $table->foreign('order_id')// relationship one to many between order & order line tables
        ->references('id')->on('orders')
            ->onDelete('cascade');
    });
}

и когда я выполняю миграцию php artisan, у меня все еще появляется эта ошибка:

bruno @ bruno-HP-EliteBook-840-G4: ~ / projetconcert $ php artisan migrate Таблица миграции успешно создана.

Подсветка \ База данных \ QueryException: SQLSTATE [HY000]: общая ошибка: 1005 Невозможно создать таблицу gestion_concert_spectacle. #sql-e08_30d (ошибка: 150 «Неправильно сформировано ограничение внешнего ключа») (SQL: alterтаблица order_lines добавить ограничение order_lines_ticket_id_foreign ссылки на внешние ключи (ticket_id) tickets (id))

Кто-нибудь знает, как это решить?Спасибо.Bruno

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Я сталкивался с такими проблемами раньше.Просто измените $table->integer('order_line_id')->unsigned(); на $table->unsignedInteger('order_line_id');то же самое со всеми другими внешними идентификаторами (order_id и ticket_id)

0 голосов
/ 11 мая 2018

Переместить определения внешнего ключа во вторую функцию Schema::table(... или, поскольку вы создаете ограничения между несколькими таблицами, добавьте внешние ключи в следующую миграцию после создания всех необходимых таблиц.

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

В качестве примечания, при построении структуры БД не нужно создавать отношения модели. Вы можете смело создавать их потом ...

...