Yii Modification indirecte de la propriété surchargée
$winnerBid = Bids::model()->find($criteria);
Modèle a suivant les relations:
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'),
);
}
Lorsque j'essaie d'enregistrer:
$this->seller->current_item++;
$this->seller->wins++;
$this->seller->save();
J'obtiens l'erreur:
Indirects modification de surcharge de
propriété d'Offres::$vendeur n'a aucun effet
(/var/www/vente aux enchères/www/protected/modèles/Offres.php:16)
Mais c'était tout de l'amende à un autre serveur?
Comment résoudre ce problème? Ou de remplacer les directives php? Des idées? TNX
source d'informationauteur Joeeee | 2011-03-17
Vous devez vous connecter pour publier un commentaire.
Le problème ici est que
$seller
n'est pas un "vrai" de la propriété (Yii implémente propriétés sur ses Modèles à l'aide de la magie__get
méthode), donc en effet que vous essayez de modifier la valeur de retour d'une fonction (qui n'a aucun effet). C'est comme si vous avez essayé de faire:Je ne suis pas sûr au sujet de l'état de ce comportement sur les différentes versions de PHP, mais il est facile de contourner le problème, vous pouvez utiliser:
J'ai été aussi avoir le message d'erreur "Yii Indirects modification de surcharge de propriété" lors de la tentative de massivement manipuler les attributs à l'aide de la CActiveRecord attributs de la propriété.
Puis, j'ai découvert une autre méthode pour résoudre ce problème, dans une affaire où la magie de la méthode est liée à une variable objet qui contient une matrice de prendre un coup d'oeil: vous créer un AUXILIAIRE de TABLEAU dans lequel vous placez les originaux et les nouvelles valeurs (parfois on veut REMPLACER une valeur liée à l'une des touches, et ces méthodes ne sont pas satisfaisantes). Et par la SUITE l'utilisation d'une assignation, qui fonctionne comme la référence. Par exemple: