0

我正在执行这段代码:

$model1 = Mage::getModel('enterprise_targetrule/index')->load(5511);
var_dump($model1);
$model2 = Mage::getModel('enterprise_targetrule/index')->
    load(5511)->
    setFlag('0')->
    save();
var_dump($model2);
$model3 = Mage::getModel('enterprise_targetrule/index')->load(5511);
var_dump($model3);
die();

var_dump 调用的输出正是我所期望的:$_data[flag]对于 1 是 1 ,对于and是$model10,对于$model2and是 1 ,对于 $model3 是 0。$model3$_origData[flag]$model1$model2

到目前为止,一切看起来都完全正确。但是,当我(在运行此代码后立即)select * from enterprise_targetrule_index在我的数据库上执行时,我得到了以下结果:

mysql> select * from enterprise_targetrule_index;
+-----------+----------+-------------------+---------+------+
| entity_id | store_id | customer_group_id | type_id | flag |
+-----------+----------+-------------------+---------+------+
|      5511 |        7 |                 0 |       1 |    1 |

为什么?

为什么flag没有更新?模型正确,所有字段正确,保存和加载调用都成功并返回完美结果,但数据库没有更新!就像我 save() 的更改没有被写入,但仍然可以以某种方式加载,至少在该脚本中。这里发生了什么?这个模型有什么特别之处,使它无法保存?

4

2 回答 2

0

原来这个原因,是模具。执行 sql 查询时,它们仅在内存中执行——除非进程成功终止,否则它们不会被写入数据库。因为我使用的是 die(),所以这会阻止编写查询。

最初我对此感到震惊,因为它完全发生在内存中而不是数据库中。一旦它被写入,它确实作为一个事务下降,但事务都是同时写入的,这就是为什么我没有在 mysql 常规日志中看到回滚命令 - 从技术上讲它不是回滚,但是甚至阻止写入第一个查询。非常奇怪,并且确实使测试变得更加困难,但请记住这一点。

于 2013-04-25T11:16:51.553 回答
0

$model2 = Mage::getModel('enterprise_targetrule/index')->load(5511);
$model2->setFlag('0');
$model2->保存();
回声 $model2->getFlag();

如果您使用 var_dump 它会显示整个对象..

于 2013-04-25T10:26:55.153 回答