2015-06-25 2 views
0

Существует модель:Yii ActiveRecord модель сохранения цепными

class Model extends ActiveRecord 
{ 
    public static function model($className=__CLASS__) { 
     return parent::model($className); 
    } 

    public function toSave(Array $data) 
    { 
     $this->setAttributes($data); 
     $this->save(); // returns true 
     return $this; 
    } 
} 

и работает

$model = Model::model()->toSave($data); 

и когда им демпинг $ модели есть все данные, которые выставиться от $ данных, но не существует PrimaryKey (Я бы).

, но, если я бегу

$model = new Model; 
$model->toSave($data); 

работает, как ожидалось.

Где проблема?

ответ

0

Вы выполняете несколько операций с сохранением, итерацией и передаете новый набор $data каждый раз. $model вот объект одной записи. Поэтому, делая каждый раз, новую модель, вы создаете новый новый объект, назначаете данные и сохраняете. Позже вы сделали правильный подход.

0

Вы использование в силу в первую очередь

$model = Model::model()->toSave($data); 

В этом случае использование называет toSave метод статически().

Во-первых, использование является незаконным, если не изменить ваше объявление

public static function toSave(Array $data) { ... } 

Кроме того, при вызове статически, значение $ это является недействительным.

Таким образом, действительное использование ваша вторая версия:

$model = new Model; 
$model->toSave($data); 

Ссылки: http://php.net/manual/en/language.oop5.static.php