CActiveRecord

Привет всем.

Есть модель, например Record, мне нужно сделать копию записи с определенным id. Можно конечно попарно перебрать все поля модели, но чувствую, что есть вариант проще.

Первое, что пришло в голову это сделать так:




...

    $new_record = new Record();

    $record = Record::model()->findByPk(10);

    $new_record->attributes = $record->attributes;

    $new_record->id = NULL;

    $new_record->save();

...



Но такой вариант не прошел. Как сделать правильно?

Почему не прокатывает, какую-то ошибку выдает?

На строке $record->save() выдает


CDbCommand не удалось исполнить SQL-запрос: SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value

Задампил аттрибуты этих объектов после присваения ($new_record->attributes = $record->attributes;):

$new_record->attribute




array

(

    'weight' => '0'

    'id' => null

    'user_id' => null

    'order_chapter_id' => null

    'product_type_id' => null

    'format_id' => null

    'ttsite_id' => null

    'service_type_id' => null

)



$record->attribute




array

(

    'id' => '40'

    'user_id' => '2'

    'order_chapter_id' => '13'

    'product_type_id' => '2'

    'format_id' => '15'

    'ttsite_id' => '39'

    'service_type_id' => '1'

    'weight' => '0'

)



Не понятно почему в первом случае weight идет первым…




...

    $new_record = new Record();

    $record = Record::model()->findByPk(10);

    $new_record->setAttributes($record->attributes, false);

    $new_record->id = NULL;

    $new_record->save();

...



Спасибо, все работает.