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


$model->save() adding 'where id = 1' condition

我试图更新一个模型,我加载模型,从POST中获取所有数据,然后保存它,很容易…但是我的记录从来没有更新过,所以我去查看日志,发现更新查询添加了一个奇怪的条件。仅供参考,MD_ID是主键。

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

$model = Ositems::model()->findByPk($id);
SELECT * FROM "MTODETALLADO_INV" "t" WHERE "t"."MD_ID"=249217

如果echo加载模型的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_值,使其更具可读性)

$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

问题就在这里!"MTODETALLADO_INV"的地方。"MD_ID"=1,如果我的模型id一直是249218,为什么它会使它1 ?

注意事项:我的模型只接受实际表中需要的一些列,Yii将其他列设置为空,我在前面的代码中省略了它们。表在外部数据库中,我使用一个自定义ActiveRecord,它根据用户管理到数据库的CDbConnection。(这是一个webservice应用)

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

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

但必须是:

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