0

我为此挠头。我有下表:

<table name="activity" idMethod="native" phpName="Activity">
  <column name="id" phpName="Id" type="INTEGER" size="13" primaryKey="true" autoIncrement="true" required="true"/>
  <column name="created" phpName="Created" type="TIMESTAMP" required="true" defaultExpr="CURRENT_TIMESTAMP"/>
  <column name="modified" phpName="Modified" type="TIMESTAMP" required="true" defaultExpr="CURRENT_TIMESTAMP"/>
  <column name="provider_id" phpName="ProviderId" type="INTEGER" size="13" required="true"/>
  <column name="name" phpName="Name" type="VARCHAR" size="100" required="true"/>
  <column name="description" phpName="Description" type="LONGVARCHAR"/>
  <column name="grade_min" phpName="GradeMin" type="INTEGER" size="2" required="true" defaultValue="0"/>
  <column name="grade_max" phpName="GradeMax" type="INTEGER" size="2" required="true" defaultValue="12"/>
  <column name="duration" phpName="Duration" type="INTEGER" size="3" required="true" defaultValue="60"/>
  <column name="image" phpName="Image" type="VARCHAR" size="255" required="true" defaultValue=""/>
  <column name="webpage" phpName="Webpage" type="VARCHAR" size="255" required="true" defaultValue=""/>
  <column name="approved" phpName="Approved" type="CHAR" sqlType="enum('Y','N')" required="true" defaultValue="N"/>
  <foreign-key foreignTable="provider" name="activity_provider" onUpdate="CASCADE">
    <reference local="provider_id" foreign="id"/>
  </foreign-key>
  <unique name="provider_name">
    <unique-column name="provider_id"/>
    <unique-column name="name"/>
  </unique>
  <vendor type="mysql">
    <parameter name="Engine" value="InnoDB"/>
  </vendor>
</table>

我执行以下 PHP:

$approved = $activity->getApproved();
if($approved == "N"){
  $activity->setApproved("Y"); // verified this line is executing
} else {
  $activity->setApproved("N");
}

echo $activity->getApproved(); // this outputs "Y"
$activity->save(); // produces line in the query log
die($activity->getApproved()); // this outputs "N"

该方法在查询日志中生成一行save()

[2018-02-26T17:00:09.038703-08:00] default.INFO: UPDATE activity SET approved='N' WHERE activity.id=6 [] []

当该approved字段设置为Y时,相同的查询运行并成功(该字段切换为N)。有什么想法可能会在这里发生吗?Propel2 讨厌 ENUM 吗?有什么建议可以解决这个问题吗?

4

1 回答 1

0

抱歉,我找到了我遇到的问题的原因。我在保存时设置为批准preSave的模型上有一个钩子。目的是如果活动被更改,它将失去其批准状态,但因为保存发生在 之后,钩子触发并将其设置为。我通过检测列是否正在被修改并且仅将列设置为如果它没有被修改来修复它。Activity"N"setApproved("Y")"N"ApprovedApproved"N"

于 2018-02-27T16:50:49.667 回答