创建模型的新实例时出错,但在使用Model :: Find()时很好

时间:2013-10-09 03:07:34

标签: mysql model laravel laravel-4 eloquent

我确信模型中的set主键正在工作,因为我使用了模型的Find()函数,该函数依赖于set主键并且它提供了正确的数据。

在创建像这段代码的新代码时,问题就出现了:

$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';
}

P.S: 我不知道这是否会有所帮助,但我运行了这个更改内容的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);

1 个答案:

答案 0 :(得分: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”,当使用自动增量更改主键的名称时,需要重置主键,以便将自动增量设置为您指定的新名称。