我的问题
我正在使用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
答案 0 :(得分:0)
从您的pk定义中删除autoincrements
和primary
。
$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)
试试这些
increments
bus_id
是外键,那么unsigned
之前添加references
category
表和类别表purchase_history
字段为auto-increment
之前已定义/创建bus_id
$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
设置为名称。因为没有混淆。