Баг Yii или руководства
В мануале по AR ясно касательно методов update* черным по белом написано.
Post::model()->update($attributes,$condition,$params);
Здесь $attributes — это массив значений полей, проиндексированных по имени поля, $counters — массив инкрементных значений, проиндексированных по имени поля, $condition и $params аналогично описанию выше.
В моем понятии это массив $arr[‘field_name’] => ‘new_field_value’ … так ? если так смотрим метод update в исходниках
public function update($attributes=null)
{
if($this->getIsNewRecord())
throw new CDbException(Yii::t('yii','The active record cannot be updated because it is new.'));
if($this->beforeSave())
{
Yii::trace(get_class($this).'.update()','system.db.ar.CActiveRecord');
if($this->_pk===null)
$this->_pk=$this->getPrimaryKey();
$this->updateByPk($this->getOldPrimaryKey(),$this->getAttributes($attributes));
$this->_pk=$this->getPrimaryKey();
$this->afterSave();
return true;
}
else
return false;
}
Основное что нам тут нужно это вот эта строчка
$this->updateByPk($this->getOldPrimaryKey(),$this->getAttributes($attributes));
передаем в другой метод. наш массив, обработанный методом $this->getAttributes():
Вот его исходник…
В его исходнике есть такой момент…
if(is_array($names))
{
$attrs=array();
foreach($names as $name)
{
if(property_exists($this,$name))
$attrs[$name]=$this->$name;
else
$attrs[$name]=isset($attributes[$name])?$attributes[$name]:null;
}
return $attrs;
}
Основное, что нам тут нужно это цикл foreach в котором видно, что мы бежим по ЗНАЧЕНИЯМ нашего массива.
и создаем новый массив , где ключом является наше ЗНАЧЕНИЕ, и присвоить пытаются свойство обьета
$this->ЗНАЧЕНИЕ ( Что конечно же будет Null)
$attrs[$name]=$this->$name;
Который час пытаюсь обновить данные… этим методом, не пойму, что к чему…
Я конечно могу использовать метод save . но стало просто интересно то ли это оплошность разработчиков, то ли я что-то не так понимаю