Kohana ORM - Дублирующая запись экземпляра / базы данных

Я хотел бы "продублировать" объект ORM и затем сохранить его в базе данных (с новым первичным ключом), но я не могу удалить первичный ключ скопированного объекта.

    $orm1 = new Model1($id);
    if($orm1->loaded()) {
     $orm2 = $orm1;
     $orm2->id = null; //something like this?
     unset($orm2->_primary_key); //or like this?
     $orm2->save(); //I would like to create a new entry in the db but it doesn't work
    }

Надеюсь, я достаточно ясно... В принципе, как я могу "снова сохранить" модель в БД...?

2 ответа

Решение

Вам необходимо скопировать данные ORM из одной модели в другую:

// save current data
$data = $orm1->as_array();
$orm2 = new Model1();
$orm2->values($data);
$orm2->save();

В этом примере используются отдельные объекты ORM. Вы можете загрузить значения обратно в $orm1, но не забудьте позвонить $orm1->clear() до $orm1->values($data), Это сбрасывает модель в ненагруженное состояние.

Обратите внимание, что as_array также вернется belongs_to отношения.

Вы можете попробовать это:

// Reset primary key
$this->_primary_key_value = NULL;

И не забывайте про клонирование объектов: Object Cloning

Другие вопросы по тегам