间接修改重载属性以修改帖子数据

时间:2017-11-03 11:56:25

标签: forms yii

我的目标是更改$ _POST ['url'],将其保存在数据库中,前面是“tcp://”。$ _ POST ['url']。

$ model = $ this-> loadModel($ id);

if (isset($_POST['xxx'])) {     
    $model->attributes = $_POST['xxx'];
    $model->attributes['url'] = 'tcp://'.$_POST['xxx'];  <-
    if ($model->save()) {

但它返回“间接修改重载属性”。 改变那个领域的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

在这种情况下,您有两种选择:

1)由于您使用了$model->attributes = $_POST['xxx'];,因此您可以访问$_POST['xxx']中的值作为模型的属性,因此$model->url = 'something';将起作用。

2)通常,您可以将要修改的值移动到新变量中,在那里修改它们并使用新变量覆盖原始值。如果要修改相关模型,这会产生相同的错误消息,这将非常有用。

错误的方式:

$model->relationSomething = new RelationSomething;
$model->relationSomething->someAttribute = 'newValue';

上面的代码会导致您收到错误消息。

正确的方法:

$model->relationSomething = new RelationSomething;
$tempVariable = $model->relationSomething;
$tempVariable->someAttribute = 'newValue';
$model->relationSomething = $tempVariable;
//Optimally you want to save the modification

使用此方法可以修改相关模型中的属性而不会导致错误。