PHP:Propel只保存第一列

时间:2018-02-17 21:23:36

标签: php mysql propel

我一直在努力解决这个问题一段时间,并且无法找出这种行为的合理解释......

我在MySQL中有一个名为“notifications”的表和列“package_id”,“mail_sent_at”和“sms_sent_at”,以及适当的Propel模型。 我用当前时间设置“sms_sent_at”列并保存它。完美的工作。

    $not = new Notification();
    $not->setPackageId($package_id);
    $not->setSmsSendedAt(time())->save();

结果如下: enter image description here

现在我想再添加一件东西 - 设置mail_sent_at列。所以我做了什么:

    $not = new Notification();
    $not->setPackageId($package_id1);
    $not->setMailSendedAt(time())->save();
    $not->setSmsSendedAt(time())->save();

这就是魔术:只设置了mail_sent_at列。  enter image description here

附加说明:

  1. 在var_dump'ing之后,我可以看到转储对象在执行这些操作后都设置了两个属性
  2. 在执行这些操作后没有设置第二列的情况下,package_id从推进查询中检索到的var_dump'ing对象。就像在DB中一样。
  3. 如果我首先设置不同的列,则会发生相同的行为 - 第一个保存的列进入DB,第二个没有。
  4. 为什么会发生这种情况,我该如何解决?

    聚苯乙烯。是的,我知道它是“发送”,而不是“发送”

    修改

    最后我找到了解决方案。如果有人遇到类似的问题: 检查推进模式中的主键是否具有autoIncrement =“true”。如果没有 - 加上它! 发生的事情是:我创建了一个id = null的新对象,使用隐式SQL INSERT将其保存到DB(因为它是新记录),并且在处理同一个对象时修改它并再次将其保存到DB,但是这个SQL UPDATE无法实现的时间(Propel指出我插入了这个对象一次)。问题是,在第一次保存后我没有得到我的对象集的id(即使在DB中设置了ID)。所以第二个SQL包含“UPDATE ... WHERE id = NULL”。

0 个答案:

没有答案