$ model-> save()添加'where id = 1'条件

时间:2014-07-10 14:27:39

标签: php oracle yii yii-cactiverecord

我正在尝试更新模型,我加载模型,从POST中获取所有数据然后保存它,很容易......但是我的记录永远不会更新所以转到日志并发现更新查询正在添加一个奇怪的条件。仅供参考,MD_ID是我的主要关键。

所以,我加载模型,下一行是Yii生成的SQL:

$model = Ositems::model()->findByPk($id);

SELECT * FROM "MTODETALLADO_INV" "t" WHERE "t"."MD_ID"=249217

如果回显加载模型的json_encode,我会在浏览器中获取该字典:

echo json_encode($model->getAttributes());

{""MD_BODEGA":"01","MD_PRODUCTO":"0031253","MD_CANTIDAD":"1","MD_PRECIOTOTAL":"1466",,"MD_PORCENTAJEDESCUENTO":"0","MD_IDCABECERA":"97403","MD_ID":"249217","MD_OBSERVACION":null}

此时一切看起来都正确,现在我从post:

获取值
$model->attributes = $_POST;

这里如果回显模型的值,我得到新值正确,现在问题是:我保存模型,这是SQL Yii运行(我替换了:yp_值使其更具可读性)< / p>

$model->save();

UPDATE "MTODETALLADO_INV" SET 

MD_BODEGA"='01'
MD_PRODUCTO"='0020514
MD_CANTIDAD"='10'
MD_PORCENTAJEDESCUENTO"='0
MD_IDCABECERA"=97403
MD_ID"=249218
MD_PRECIOTOTAL"='36210'
MD_OBSERVACION"=''

WHERE "MTODETALLADO_INV"."MD_ID"=1

有问题! WHERE“MTODETALLADO_INV”。“MD_ID”= 1 ,如果我的模型ID一直是 249218 ,为什么会 1 ?< / p>

一些注意事项: 我的模型只需要从实际表中获取一些我需要的列,Yii将其他列设置为null,我在前面的代码中省略了它们。 该表位于外部数据库中,我使用自定义ActiveRecord,根据用户管理CDbConnection到数据库。 (这是一个网络服务应用程序)

1 个答案:

答案 0 :(得分:0)

我遵循了save()所做的功能,最终可以找到问题,当时它试图获取主键。我的模型中有这个方法:

public function primaryKey()
    {
        return array('MS_ID');
    }
}

但必须是:

public function primaryKey()
    {
        return 'MS_ID';
    }
}

不知何故导致了这个问题。