yii CDbCommand无法执行SQL语句:SQL状态[HY000]:一般错误:1364

oyxsuwqo  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(159)

我正在跟踪Yii Blog tutorial,在做评论部分时被这个错误卡住了。

CDbCommand failed to execute the SQL statement: SQLSTATE[HY000]: General error: 1364 Field 'post_id' doesn't have a default value. The SQL statement executed was: INSERT INTO `tbl_comment` (`status`, `content`, `author`, `email`, `url`, `create_time`) VALUES (:yp0, :yp1, :yp2, :yp3, :yp4, :yp5)

同样的错误也出现在status上,但我在数据库中设置了默认值。但这次是post_id,我不知道如何解决它。Post ID是另一个表的FK。Here是整个数据库设计。
谢谢你!

wkyowqbh

wkyowqbh1#

看起来您的“post_id”属性(可能是您的主键)没有设置为“auto increment”,或者在数据库中设置为“not null”。请查看以下ORM。将其与您的ORM进行比较,并修复您的数据库端错误。另外,不要忘记通过. GII升级您的模型!

-- -----------------------------------------------------
-- Table `mydb`.`tbl_comment`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`tbl_comment` ;

CREATE TABLE IF NOT EXISTS `mydb`.`tbl_comment` (
  `post_id` INT NOT NULL,
  `status` VARCHAR(45) NULL,
  `content` TEXT NULL COMMENT ' ',
  `author` VARCHAR(255) NULL,
  `email` VARCHAR(255) NULL,
  `url` VARCHAR(511) NULL,
  `create_time` DATETIME NULL,
  PRIMARY KEY (`post_id`))
ENGINE = InnoDB;

否则,如果“post_id”不是主键,并且未设置为“auto increment”,则可以尝试以下方法来解决此问题:

解决方案1)在保存/更新之前在php中设置“post_id”,如:

$model = new Tbl_comment; //hope this is your Yii model name...
$model->post_id = 123

if(!$model->save()) {
   var_dump($model->errors);
}

解决方案2)在您的数据库ORM中为属性“post_id”添加一个默认值。(因为我不知道您的关系和ORM的正确性。)

-----------------------------------------
-- Table `mydb`.`tbl_comment`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`tbl_comment` ;

CREATE TABLE IF NOT EXISTS `mydb`.`tbl_comment` (
  `post_id` INT NULL DEFAULT someDefault,
  `status` VARCHAR(45) NULL,
  `content` TEXT NULL COMMENT ' ',
  `author` VARCHAR(255) NULL,
  `email` VARCHAR(255) NULL,
  `url` VARCHAR(511) NULL,
  `create_time` DATETIME NULL)
ENGINE = InnoDB;

表详细信息:

相关问题