Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Laravel迁移中连接3个表(语法错误或访问冲突)_Php_Mysql_Laravel_Database Migration - Fatal编程技术网

Php 如何在Laravel迁移中连接3个表(语法错误或访问冲突)

Php 如何在Laravel迁移中连接3个表(语法错误或访问冲突),php,mysql,laravel,database-migration,Php,Mysql,Laravel,Database Migration,我对Laravel、PHP和MySql的知识有限。我正在尝试使用外键建立一个包含3个连接表的数据库。我以前在WorkBench MySql中手动实现过,但在Laravel中无法实现。这是我的错误和代码 SQL STATE[42000]: Syntax error or access violation: 1072 Key column 'cat_id ' doesn't exist in table (SQL: alter table `users` add index `users_c

我对Laravel、PHP和MySql的知识有限。我正在尝试使用外键建立一个包含3个连接表的数据库。我以前在WorkBench MySql中手动实现过,但在Laravel中无法实现。这是我的错误和代码

SQL STATE[42000]: Syntax error or access violation: 1072 Key column 'cat_id  
  ' doesn't exist in table (SQL: alter table `users` add index `users_cat_id  
  _usr_id_index`(`cat_id`, `usr_id`)) 
表1

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('usr_id')->autoIncrement();
        $table->string('usr_email',45)->unique();
        $table->string('usr_password',256);
        $table->rememberToken();
        $table->string('usr_name',45);
        $table->string('usr_surname',45);
        $table->string('usr_title',45);
        $table->string('usr_psc',5);
        $table->string('usr_region',128);
        $table->string('usr_adress',128);
        $table->string('usr_tel',10);
        $table->string('usr_tel_int',13);
        $table->binary('usr_image');
        $table->tinyInteger('usr_type');
        $table->index(['cat_id','usr_id'])->nullable();
        $table->index(['tem_id','usr_id'])->nullable();

    });
}
表2

public function up()
{
     Schema::create('category', function (Blueprint $table) {
         $table->primary('cat_id');
         $table->string('cat_name',45);
     });
     Schema::table('category', function(Blueprint $table) {
         $table->foreign('cat_id')->references('cat_id')->on('users');
      });
 }
表3

public function up()
{
     Schema::create('team', function (Blueprint $table) {
       $table->increments('tem_id');
       $table->unique('tem_sub_id');
       $table->string('tem_name',45);
       $table->string('tem_subteam_name',45);

     });
     Schema::table('team', function(Blueprint $table) {
         $table->foreign('tem_id')->references('tem_id')->on('users');
      });

 }

发生此错误的原因是
cat\u id
users
表中不存在。除此之外,在编写Laravel迁移时,还需要记住以下几点:

  • 除非设置,否则只能引用现有表,这就是为什么我在下面的示例中更改了创建表的顺序

  • 请记住,为了使Laravel magic方法发挥作用,您应该以复数形式(用户、团队、类别)编写表名

  • 使用“id”作为您的id(而不是“usr_id”)。尽量避免使用表名作为数据库列的前缀

由于Laravel雄辩的ORM严重依赖于标准,我建议以如下方式重写您的表格:

表格类别

public function up()
{
     Schema::create('categories', function (Blueprint $table) {
         $table->increments('id');

         $table->string('name',45);
         // etc... 
     });

 }
public function up()
{
     Schema::create('teams', function (Blueprint $table) {
       $table->increments('id');

       $table->string('name',45);
       // etc... 

     });
 }
public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('category_id')->unsigned()->nullable();;
        $table->foreign('category_id')->references('id')->on('categories');
        $table->integer('team_id')->unsigned()->nullable(); 
        $table->foreign('team_id')->references('id')->on('teams');

        $table->string('email',45)->unique();
        // etc...

    });
}
桌上团队

public function up()
{
     Schema::create('categories', function (Blueprint $table) {
         $table->increments('id');

         $table->string('name',45);
         // etc... 
     });

 }
public function up()
{
     Schema::create('teams', function (Blueprint $table) {
       $table->increments('id');

       $table->string('name',45);
       // etc... 

     });
 }
public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('category_id')->unsigned()->nullable();;
        $table->foreign('category_id')->references('id')->on('categories');
        $table->integer('team_id')->unsigned()->nullable(); 
        $table->foreign('team_id')->references('id')->on('teams');

        $table->string('email',45)->unique();
        // etc...

    });
}
表格用户

public function up()
{
     Schema::create('categories', function (Blueprint $table) {
         $table->increments('id');

         $table->string('name',45);
         // etc... 
     });

 }
public function up()
{
     Schema::create('teams', function (Blueprint $table) {
       $table->increments('id');

       $table->string('name',45);
       // etc... 

     });
 }
public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('category_id')->unsigned()->nullable();;
        $table->foreign('category_id')->references('id')->on('categories');
        $table->integer('team_id')->unsigned()->nullable(); 
        $table->foreign('team_id')->references('id')->on('teams');

        $table->string('email',45)->unique();
        // etc...

    });
}

我在第一篇文章之前就试过了。下面是代码修改后的错误。SQLSTATE[42000]:语法错误或访问冲突:1072键列“cat\u id”在表中不存在(SQL:alter table users add index users\u cat\u id\u index(cat\u id))@scrapit,我更新了答案。希望这有帮助。为了关注您的问题,为了清晰起见,我省略了一些代码。我更改了代码,仍然没有在Laravel中构建数据库。SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQ L:alter table
users
add constraint
users\u cat\u id\u foreign
外键(
cat\u id
)引用
categories
)在Connection.php第458行中:SQLSTATE[HY000]:一般错误:1215无法添加外键约束我复制/粘贴了,并且再次出现类似错误。如果有什么不同的话,我是在宅地上跑步。无论如何,谢谢你的帮助,我会再次重写我的代码。Homestead很好。如果你在正确创建迁移时遇到问题,我建议你使用它这是一个在线工具来生成迁移文件