php工匠迁移。定义了多个主键

时间:2018-01-31 19:18:32

标签: php database laravel-5 migration laravel-5.5

我的问题

我正在使用laravel构建我的第一个api,并且在尝试运行时遇到多个主键定义错误while(1)我不明白我是如何定义多个主键的。每次运行迁移时,我都会遇到这些错误php artisan migrate error

我的疑难解答

我认为因为autoIncrementing()只能用于可能将其定义为主键的主键,所以我将php artisan migrate更改为$table->increments('bus_id')->autoIncrement()->primary();$table->increments('bus_id')->autoIncrement();

每当我尝试运行迁移时,我都会删除我的数据库并重新创建它并尝试再次运行我的迁移(因此每次都是新数据库而没有损坏的数据)但仍然没有差异。

我检查了上面我的错误代码图片中提到的Connection.php,但没有看到任何与主键有关的内容。

我的问题

我的代码如下,有人可以帮我理解我是如何制作双主键的吗?

$table->increments('bus_id')->autoIncrement();

请注意,这里有关于Stack溢出的类似问题,我也试过他们的解决方案但没有成功 编辑后我仍然收到此错误:

    <?php

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

class CreatePurchaseHistoryTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('purchase_history', function (Blueprint $table) {
            $table->increments('pur_id', 11);
            $table->string('pur_item', 255);
            $table->dateTimeTz('pur_date');
            $table->string('bus_name', 50);
            $table->double('pur_amount', 10, 2);
            $table->double('cashback_amount', 10, 2);
            $table->integer('bus_id', 11);
            $table->foreign('bus_id')->references('bus_id')->on('business');   
            $table->timestamps();
            $table->rememberToken();  
            $table->engine = 'InnoDB';  
        });
    }

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

运行php artisan migrate:refresh migrate:refresh error

business table

2 个答案:

答案 0 :(得分:0)

从您的pk定义中删除autoincrementsprimary

$table->increments('bus_id');

文档定义:

  

自动递增UNSIGNED INTEGER(主键)等效列。

https://laravel.com/docs/5.5/migrations#columns

编辑:

increments方法只接受一个参数:

$table->increments('pur_id');

https://laravel.com/api/5.3/Illuminate/Database/Schema/Blueprint.html#method_increments

修改

问题是bus_id,它也以某种方式被设置为主键。从例外情况来看:

`bus_id` int not null auto_increment primary key,

答案 1 :(得分:0)

试试这些

  1. 删除increments
  2. 上的值
  3. 如果bus_id是外键,那么unsigned之前添加references
  4. 重要提示:确保category表和类别表purchase_history字段为auto-increment之前已定义/创建bus_id
  5. $table->increments('pur_id'); 
    $table->integer('bus_id')->unsigned();
    $table->foreign('bus_id')->references('bus_id')->on('category'); 
                                           ^ make sure category table auto increment field value is bus_id
    

    仅供参考:如果我绘制表格,我会在自动增量字段中将id设置为名称。因为没有混淆。