Laravel 5.4:模型更新失败产生错误(SQLSTATE [21S01]:插入值列表与列不匹配...)

时间:2017-07-19 23:56:23

标签: php sql laravel exception heroku

我已经阅读了所有具有类似标题的问题,并认为这有些不同。

首先,我的代码(下方)是现有人员记录的更新。我根据条件更新了2个字段。完整的异常仅列出生成的SQL的一部分,并确实将其显示为更新查询。

这就是为什么我感到困惑,因为这不是一个列数问题,正如我所看到的那样。

代码:

if(<some condition>)) {
    $user              = Socialite::driver('linkedin')->user();
    $person            = Person::find($id);
    $person->avatarURL = $user->avatar;
    $person->updaterID = $id;
    $person->save();
}

人员表中包含这两列。

完整的错误文字:

SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1 
(SQL: update `person` set `avatarURL` = urltext, `updateDate` = 2017-07-19 15:02:28 where `personID` = 357)

现在,我知道上面的SQL在转储到查询编辑器时不会运行,因为没有引号,例如通常应该有。

我不确定为什么会以这种方式显示它。

我在同一个表上尝试了以下SQL并收到了同样的错误。

UPDATE `person` SET `midName`='blah' WHERE `personID`='357';

错误:

Operation failed: There was an error while applying the SQL script to the database.
ERROR 1136: 1136: Column count doesn't match value count at row 1
SQL Statement:
UPDATE `bl5hod18fm0zc1zh`.`person` SET `midName`='blah' WHERE `personID`='357'

最后,唯一可能相关的其他细节是这是heroku cedar-14堆栈上的JawsDB mysql实现。

1 个答案:

答案 0 :(得分:0)

确定。这是一个棘手的问题,我已经解决了,而且我希望在未来的某个时间发布一个答案来保存某个人。希望如此。

问题是将人员记录保存到person_history表的触发器。尽管错误另有说明,但是对person_history表的插入失败了。