Laravel迁移外键错误

时间:2018-08-24 19:46:24

标签: php laravel laravel-5

Laravel 5.6运行于: PHP 7.2, MariaDB 10.3

当我想为表设置外键时,我只会继续犯该错误。

在其他表上,Laravel本身定义的所有id变量和自动递增的无符号

所以,我的迁移是这样的:

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服务器版本相对应的手册以在lin上的')on delete层叠级附近使用正确的语法   e 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 :(得分:0)

尝试

$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');

答案 1 :(得分:0)

我认为您对此帖子Laravel foreign key onDelete('cascade') not working有类似的疑问

希望这会有所帮助

答案 2 :(得分:0)

我解决了这个问题。由于Laravel尝试在角色表之前迁移user_roles表,因此失败。我只是将角色表迁移到user_roles表之前,并且它起作用了!在解决方案规则表未抛出错误但尚未完全创建之前。