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