2014-07-10 54 views
1

我想更新的模型,我加載模型,以從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} 

此時一切看起來都對,現在我從博文的值:

$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 

有問題! WHERE「MTODETALLADO_INV」。「」MD_ID「= 1,爲什麼會這麼做如果這段時間我的型號ID一直是?

一些注意事項: 我的模型只需要從實際表中獲取一些列,Yii將其他列設置爲null,並在前面的代碼中省略它們。 該表在一個外部數據庫中,我使用了一個自定義的ActiveRecord,它根據用戶管理到數據庫的CDbConnection。 (這是一個Web服務應用程序)

+0

你可以添加你的模型的'rules()'和'$ _POST'的轉儲嗎? – topher

回答

0

我跟着函數救什麼()沒有和終於找到問題是,當它試圖讓主鍵。我在我的模型,這個方法:

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

但它必須是:

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

不知怎的,這是造成問題的原因。