Laravel Migration Ошибка Foreignkey - PullRequest
0 голосов
/ 24 августа 2018

Laravel 5.6 работает на: PHP 7.2, MariaDB 10.3

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

В других таблицах все переменные idопределяется самим Laravel и автоматически увеличивает без знака

Итак, моя миграция выглядит так:

public function up()
{

    Schema::create('user_roles', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('role_id');
        $table->unsignedInteger('user_id');

        $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    });
}

Ошибка такая: :

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка;обратитесь к руководству, соответствующему вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с ') для каскада удаления' в строке 1 (SQL: таблица изменений user_roles добавить ограничение user_roles_role_id_foreign ссылки на внешний ключ (role_id) roles () при каскаде удаления)

Ошибки, выдаваемые Laravel :

1 PDOException: :( "SQLSTATE [42000]: синтаксическая ошибка илинарушение прав доступа: 1064 У вас есть ошибка в вашем синтаксисе SQL; обратитесь к руководству, соответствующему вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с ') при удалении каскада' в строке 1 ") C: \ xampp \ htdocs \ order-project \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Connection.php: 452

2 PDO :: prepare ("изменить таблицу user_roles добавить ограничение user_roles_role_id_foreign ссылки на внешний ключ (role_id)"roles () при каскаде удаления ") C: \ xampp \ htdocs \ order-project \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Connection.php: 452

Ответы [ 3 ]

0 голосов
/ 25 августа 2018

Я думаю, что у вас похожая проблема с этим сообщением Внешний ключ Laravel onDelete ('cascade') не работает

Надеюсь, что это может помочь

0 голосов
/ 25 августа 2018

Я решил проблему. Сбой из-за того, что Laravel пытается перенести таблицу user_roles перед таблицей ролей. Я просто перенесу таблицу ролей перед таблицей user_roles, и она работает! До того, как таблица правил решения не выдает ошибку, она не создана полностью.

0 голосов
/ 24 августа 2018

попробуйте

$table->integer('role_id')->unsigned();
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');

$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...