PHP職人は移動します。複数の主キーが定義されています -- php フィールド と database フィールド と laravel-5 フィールド と migration フィールド と laravel-5.5 フィールド 関連 問題

php artisan migrate. Multiple primary key defined












1
vote

問題

日本語

私の問題

Laravelを使って最初のAPIを構築しています。 php artisan migrate を実行しようとしている間に複数の主キー定義エラーが発生しました。移行を実行するたびに、これらのエラーを取得します。の

私のトラブルシューティング

autoincrementing()以降、プライマリキーとして定義されている可能性がある主キーにのみ使用できますので、 $table->increments('bus_id')->autoIncrement()->primary(); > $table->increments('bus_id')->autoIncrement();

私がマイグレーションを実行しようとしたたびにデータベースを削除して再作成して再作成しようとしました(それで、破損したデータなしの毎回新しいデータベースでした)が違いはありませんでした。

私は上記の私のエラーコードの写真に記載されていたmy connection.phpをチェックしましたが、どんな主キーに関連していませんでした。

私の質問

私のコードは以下のとおり、誰かが私が二重の主要なキーを作っている方法を理解するのを手伝ってくれることができますか?

<事前> <コード> <?php use IlluminateSupportFacadesSchema; use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration; 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'); } }

ここではここで似た質問があります。 編集後はまだこのエラーを得ています:

<事前> <コード> In Connection.php line 664: SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto colu mn and it must be defined as a key (SQL: create table `purchase_history` (`pur_id` int unsigned not null auto_incre ment primary key, `pur_item` varchar(255) not null, `pur_date` datetime not null, `bus_name` varchar(50) not null, `pur_amount` double(10, 2) not null, `cashback_amount` double(10, 2) not null, `bus_id` int not null auto_increment primary key, `created_at` timestamp null, `updated_at` timestamp null, `remember_token` varchar(100) null) default character set utf8mb4 collate utf8mb4_unicode_ci engine = InnoDB)

PHP職人の移行後:refresh migrate:更新エラー

ビジネステーブル

英語

My Problem

I'm building my first api using laravel and am getting a multiple primary key defined error while trying to run php artisan migrate I don't understand how I have defined multiple primary keys. Every time I run a migrate I get these errors php artisan migrate error.

My Troubleshooting

I thought since autoIncrementing() can only be used for a primary key that maybe that defined it as a primary key, so I altered $table->increments('bus_id')->autoIncrement()->primary(); to $table->increments('bus_id')->autoIncrement(); and $table->increments('bus_id')->autoIncrement();

Every time I had tried to run my migrations I dropped my database and re-created it and tried to run my migrations again (so it was a new database every time with no corrupt data) but still didn't make a difference.

I checked my Connection.php that was mentioned in the picture of my error code above but didn't see anything pertaining to any primary keys.

My Question

My code is below, can someone help me understand how I'm making double primary keys?

    <?php  use IlluminateSupportFacadesSchema; use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration;  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');     } } 

Please note there are similar questions here on Stack overflow which I have also tried their solutions without any success After edit I'm still getting this error:

In Connection.php line 664:    SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto colu   mn and it must be defined as a key (SQL: create table `purchase_history` (`pur_id` int unsigned not null auto_incre   ment primary key, `pur_item` varchar(255) not null, `pur_date` datetime not null, `bus_name` varchar(50) not null,   `pur_amount` double(10, 2) not null, `cashback_amount` double(10, 2) not null, `bus_id` int not null auto_increment    primary key, `created_at` timestamp null, `updated_at` timestamp null, `remember_token` varchar(100) null) default    character set utf8mb4 collate utf8mb4_unicode_ci engine = InnoDB) 

After running php artisan migrate:refresh migrate:refresh error

business table

</div
              
     
     

回答リスト

0
 
vote
vote
ベストアンサー
 

これらの

を試してみてください
  1. increments
  2. の値を削除する
  3. bus_id の場合 unsigned
  4. の場合
  5. 重要:必ず 99887664 が定義されています purchase_history 表とカテゴリ表 フィールドは<コード> bus_id

  6. <事前> <コード> $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

    FYI:テーブルを描画すると、 id をAuto-Incrementフィールドに名前として設定します。混乱なし。

 

Try these

  1. Remove value on increments
  2. If bus_id is and foreign key then unsigned it before add references
  3. Important: Make sure category has defined/created before purchase_history table and category table auto-increment field is 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 

FYI: If I draw table the I set id as a name on the auto-increment field. because no confusion.

</div
 
 
         
         
0
 
vote

PK定義から<コード> bus_id0 bus_id1 を削除します。

<事前> <コード> bus_id2

ドキュメントからの定義:

符号なし整数(主キー)等価列を自動増分します。

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

編集:

bus_id3 メソッドは1つのパラメータのみを取ります。

<事前> <コード> bus_id4

https://laravel.com/api/5.3. / illuminate/database/schema/blueprint.html#method_increments

編集

問題は<コード> bus_id5 であり、どういうわけか主キーとしても設定されています。例外から:

<事前> <コード> auto-increment16
 

Remove the autoincrements and primary from your pk definition.

$table->increments('bus_id'); 

Definition from the docs:

Auto-incrementing UNSIGNED INTEGER (primary key) equivalent column.

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

Edit:

The increments method only takes one parameter:

$table->increments('pur_id'); 

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

Edit

The problem is bus_id, its somehow being set as a primary key also. From the exception:

`bus_id` int not null auto_increment primary key, 
</div
 
 
   
   

関連する質問

1  Laravel Passport APIは、データベース上に実際に存在するかどうかを確認するためにaccess_tokenを取得する  ( Laravel passport api retrieve access token to check if really exist on database ) 
Laravel PassportとAxiosを使用している、認証されたユーザーの現在のアクセストークンが私のデータベースの中にあるかどうかを確認したいので、 auth.js。この関数では、ローカルストレージにトークンがあるかどうかを確認したいだけでなく、デ...

0  Laravel 5.5 API認証(Passport) - Cross-Env:NPM Run Devを実行すると、見つかりません。  ( Laravel 5 5 api authentication passport cross env not found error when i r ) 
私はプロジェクトでLaravel Passport認証を実装しようとしましたが、機能していません。最初は、他の構成およびファイルの許可をすべてのものでLARVAL5.5をインストールしました。 パスポート認証を実装するために私はLARVERのドキュメントに従っ...

1  Laravel 5.5カスタム認証を作成する方法  ( How to create a laravel 5 5 custom auth ) 
Laravel 5.5でカスタム認証コントローラを作成しました。 namespace AppApplicationsPainelHttpControllers; use IlluminateHttpRequest; use Ill...

2  Laravel 5.5グループミドルウェアはあなたを何度もリダイレクトしました  ( Laravel 5 5 group middleware redirected you too many times ) 
is_admin 9988777661 を持つユーザーだけがユーザーのみを許可しているのは、 9988777661 の中だけであるが、そのルートにアクセスしたときにユーザーがある場合そしてadmin、エラーメッセージが表示されます: このページが機...

5  パラメータをキューに渡すにはどうすればよいですか。  ( How do i pass parameters to a queue ) 
Laravel 5.5を使用して、アップロードされた画像のサイズを変更する単純なキューを作成します。画像の一時ファイルの場所など、パラメータをキューに渡す方法を理解することはできません。私の同僚は、文字列が仕事に渡すことができる古いバージョンのLarvels...

-1  Laravel API:宣誓/トークンは悪いリクエストを返します  ( Laravel api oath token returns bad request ) 
Laravel 5.5でAPIを作成する方法を学びようとしています。ユーザー認証のためのパスポートをインストールしました。 追加: <コード> LaravelPassportPassportServiceProvider::class, 追加: ...

0  Laravel 5.5コレクションのように  ( Laravel 5 5 collection where like ) 
コレクションを使用してデータをフィルタリングしています。しかし、私は方法のように使う必要があります。 ('name', 'LIKE', '%value%') は、次のように書かれたのですが、機能しませんでした。 これは私の方法です: <事前> <コード> ...

1  Laravelでは、要求が処理されているかどうかをどのように判断できますか?  ( In laravel how can it be determined whether a request is being processed ) 
WebサーバーまたはTinker / Worker / Alishから呼び出すことができるコードをいくつか持っています。コードは、Webサーバーから呼び出されているかどうかを判断する必要があります。 私は最初は要求がないときにrequest()がnullにな...

0  Laravel:接続の場合は移行します  ( Laravel migrate if connection ) 
私のプロジェクトはマルチデータベースプロジェクトです。一部の移行ファイルは、すべてのデータベースと1つまたは2つのデータベース上で実行する必要があります。私の質問について:接続名を調査する方法? だから私の移行ファイルのようなものである場合 <事前> <コード...

1  Laravel 5.5:多次元配列を単一のものに変換します  ( Laravel 5 5 convert multidimensional array to single one ) 
私は次の多次元配列を単一のものに変換したい。 parent_id 列の列は、親配列の category_id と同じでなければなりません。 sort_order_number の子配列は、 children 配列の位置に等しくなければなりません。親...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有