2013-11-21 61 views
6

我需要停止更新某些值,即使這些值設置爲POST數組。要做到這一點我在yii規則中使用不安全。更新時,跳過某些屬性更新yii

array('id', 'unsafe', 'on'=>'update'), 

還在爲此,我無法從更新跳過ID。

這怎麼能用yii完成?

下面

是我的規則功能..

public function rules() 
{ 
    // NOTE: you should only define rules for those attributes that 
    // will receive user inputs. 
    return array(
     array('name, body, created_date', 'required'), 
     array('name', 'length', 'max'=>128), 
     array('body', 'length', 'max'=>512), 
     array('id', 'unsafe', 'on'=>'update'), 
     // The following rule is used by search(). 
     // @todo Please remove those attributes that should not be searched. 
     array('id, name, body, created_date', 'safe', 'on'=>'search'), 
    ); 
} 

更新1

$模型 - >屬性= $ _POST [ '用戶'];

我需要保存時跳過某些屬性。

$ model-> save();

+1

你可以添加你的更新功能嗎? – secretlm

+0

@secretlm它不是一個函數。它的一個場景。 – dev1234

+0

「我需要停止更新某些值,即使那些設置爲POST數組」=>我想查看您在「更新」操作中爲模型屬性設置值的代碼。 – secretlm

回答

2

當你創建你的控制器的新模式情況下,你需要聲明的情況下 例如 如果你的聲明是這樣的

$myModelInstance = new MyModel(); 

則需要將其更改爲

$myModelInstance = new MyModel('update'); 

但是,如果您正在使用活動記錄的其中一種查找方法進行保存,那麼它會自動設置爲「更新」,如下所示:http://www.yiiframework.com/doc/api/1.1/CActiveRecord#save-detail

,如果你使用的是一些其他的邏輯來聲明,你可以簡單地使用setScenario功能

$myModel->setScenario("update"); 
1

正如Manquer提到的,您的情況可能是沒有要更新的模式。正確的更新序列將涉及加載現有對象實例,分配變量並保存它們。我個人絕不會僅僅實例化一個對象,並給它一個不同的場景,我認爲這是要求問題。

// Load the existing object first 
$user = User::model()->findByPk(..); 
// Assign everything that has either a validation rule or is added as "safe" 
$user->attributes = $_POST['User']; 
// Save the updated version 
$user->save(); 

Yii的人,不知道更新了「ID」(如果它被正確地定義爲你的數據庫中的主鍵)。不需要將其標記爲不安全。 所以:確保實例是從數據庫加載的($ user-> isNewRecord應該是FALSE)並且該表有PK。然後更新你想要的屬性。

您也可以通過先「清理」$ _POST來更新特定屬性,或者當您調用save時,只需將其稱爲$ user-> save(true,array('name','body'))來更新例如姓名和身體。

+0

因此,沒有其他方式,將不安全的數組設置爲不安全('id','created_date'),並且不安全陣列中的屬性不會被添加或更新,並且將保持舊數據庫中的值。從模型層面完成的任何類似事情? – dev1234

+1

由於您在「更新」場景中添加了不安全驗證程序,因此您必須確保您的模型在該場景中,即Manquer顯示給您的方式。我真的沒有看到你使用ActiveRecord模式這一點(因爲你繞過了一切:))。你可能只想使用DAO訪問(Yii :: app() - > db-> createCommand等) – Blizz

+0

謝謝。在這個問題上有什麼要說的? http://stackoverflow.com/questions/20142553/model-exist-or-not-in-yii-using-a-custom-function-performance – dev1234