0

Find()セットの主キーに依存するモデルの関数を使用し、正しいデータを提供するため、モデルのセットの主キーが機能していると確信しています。

このコードのような新しいものを作成すると、問題が発生します。

$new = new Book();
$new->title = 'pogi';
$new->save();

次のエラーが生成されます。

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'PRIMARY' (SQL: insert into `books` (`title`, `updated_at`, `created_at`) values (?, ?, ?)) (Bindings: array ( 0 => 'pogi', 1 => '2013-10-09 02:18:53', 2 => '2013-10-09 02:18:53', ))

モデル:

class Book extends Eloquent {

    protected $table = 'books';
    public $primaryKey = 'book_id';
}

PS:これが役立つかどうかはわかりませんが、次のSQLコードを実行すると、状況が変わります:

ALTER TABLE books
CHANGE link ibooks_url varchar(255),
ADD COLUMN kindle_url varchar(255),
ADD COLUMN kobo_url varchar(255),
ADD COLUMN ibooks_id varchar(255),
CHANGE book_id kindle_id varchar(255),
ADD COLUMN kobo_id varchar(255),
ADD COLUMN ibooks_id varchar(255),
CHANGE id book_id varchar(255);
4

1 に答える 1

1
ALTER TABLE books MODIFY book_id INT NOT NULL;
ALTER TABLE books DROP PRIMARY KEY;
ALTER TABLE books MODIFY book_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;

問題は、auto_increment がまだ「id」フィールドに設定されていることです。

上記の SQL コードを実行して、自動インクリメントを最新の主キー「book_id」に変更します。自動インクリメントで主キーの名前を変更する場合は、主キーをリセットして、自動インクリメントを新しい名前に設定できるようにする必要があります。あなたが割り当てたもの。

于 2013-10-09T03:12:33.263 に答える