$winnerBid = Bids::model()->find($criteria);
模型有下一个关系:
public function relations() {
return array(
'item' => array(self::BELONGS_TO, 'Goods', 'item_id'),
'room' => array(self::BELONGS_TO, 'Rooms', 'room_id'),
'seller' => array(self::BELONGS_TO, 'RoomPlayers', 'seller_id'),
'buyer' => array(self::BELONGS_TO, 'RoomPlayers', 'buyer_id'),
);
}
当我想保存时:
$this->seller->current_item++;
$this->seller->wins++;
$this->seller->save();
我收到错误:
间接修改过载 属性出价:: $卖家没有效果 (/var/www/auction/www/protected/models/Bids.php:16)
但是在另一台服务器上一切都很好吗? 怎么解决?或者覆盖php指令?有任何想法吗? TNX
答案 0 :(得分:17)
这里的问题是$seller
不是“真正的”属性(Yii通过使用魔术__get
方法在其模型上实现属性),所以实际上你试图修改返回值一个函数(没有效果)。就像你试图做的那样:
function foo() {
return 42;
}
// INVALID CODE FOR ILLUSTRATION
(foo())++;
我不确定这种行为在不同PHP版本上的状态,但是您可以使用一种简单的解决方法:
$seller = $this->seller;
$seller->current_item++;
$seller->wins++;
$seller->save();
答案 1 :(得分:2)
在尝试使用CActiveRecord属性属性大规模操作属性时,我还收到错误消息“Yii间接修改重载属性”。
然后,我发现了另一种方法来克服这个问题,在魔术方法与包含数组的对象变量相关的情况下看一下:你创建一个AUXILIARY ARRAY,你可以在其中放置原始值和新值(有时候想要替换与其中一个键相关的值,这些方法并不令人满意)。并且AFTERWARDS使用分配,其作用类似于参考。例如:
$auxiliary_array = array();
foreach(Object->array_built_with_magic as $key=>$value) {
if(….) {
$auxiliary_array[$key] = Object->array_built_with_magic[$key];
} else if (…) {
$auxiliary_array[$key] = $NEW_VALUE
}
}
//So now we have the array $auxiliary_array with the
// desired MIX (that is, some originals, some modifications)
//So we will do now:
Object->array_built_with_magic =$auxiliary_array;