Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Dante
цитировать
Зарегистрирован: 01 Ноя 2007 15:31:31 Сообщения: 6
|
Добавлено: 18 Дек 2007 14:13:55 Заголовок сообщения: Метод save перезаписывает данные |
|
|
Вот такая проблема:
есть таблица в БД
id, field1, field2
id - primary key, autoincrement
Из модели вызвываю:
$this->save(array('field1' => 'test1', field2 => 'test1'));
$this->save(array('field2' => 'test2', field2 => 'test2'));
В БД добавляется только последняя запись. Я догадываюсь что при втором вызове save оно не добавляет новую запись, а апдейтит старую.
В чем проблема?
Пользуясь моментом, так же хотел спросить, в чем разница между
$this->Modelname->save($this->data) и $this->Modelname->save($this->data['Modelname']) ?
В мануале используются оба варианта. |
|
Вернуться к началу |
|
 |
KPOTOB
цитировать
Зарегистрирован: 09 Дек 2007 14:46:20 Сообщения: 127
|
Добавлено: 18 Дек 2007 14:35:41 Заголовок сообщения: |
|
|
Если id в инстансе модели сохранен
Не уверен, но попробуй
Код: |
$this->save(array('id' => false, 'field1' => 'test1', field2 => 'test1'));
|
Либо не через собственный инстанс ходи а создавай по одному на save
Код: |
$a = new Model();
$b = new Model();
$a->save();
$b->save();
|
Или
Код: |
$this->create($data0); $this->save();
$this->create($data1); $this->save();
|
|
|
Вернуться к началу |
|
 |
Dante
цитировать
Зарегистрирован: 01 Ноя 2007 15:31:31 Сообщения: 6
|
Добавлено: 18 Дек 2007 14:58:19 Заголовок сообщения: |
|
|
KPOTOB писал(а): | Если id в инстансе модели сохранен
Не уверен, но попробуй
Код: |
$this->save(array('id' => false, 'field1' => 'test1', field2 => 'test1'));
|
|
Большое спасибо, помогло
А на второй вопрос, кто нибудь знает ответ? |
|
Вернуться к началу |
|
 |
KPOTOB
цитировать
Зарегистрирован: 09 Дек 2007 14:46:20 Сообщения: 127
|
Добавлено: 18 Дек 2007 20:41:05 Заголовок сообщения: |
|
|
Про второй вопрос
Оба варианта эквиваленты
Код: |
$data = array();
$data['Post'] = array('id' => false, 'title' => 'ыыыыыыыыы', 'text' => 'ёёёёёёёёёё');
// Вариант 1
$this->Post->save($data);
// Вариант 2
$this->Post->save($data['Post']);
|
Вариант 1 будет работать быстрее (см. Model::set())
Смысл думаю чтобы за один вызов сохранять данные и в ассоциированых моделях - только оно еще не заимплеменчено )) см. https://trac.cakephp.org/ticket/3615 |
|
Вернуться к началу |
|
 |
KPOTOB
цитировать
Зарегистрирован: 09 Дек 2007 14:46:20 Сообщения: 127
|
Добавлено: 18 Дек 2007 20:45:52 Заголовок сообщения: |
|
|
В догонку
Цель такая
Код: |
$data = array();
$data['Post'] = array('title' => 'Some', 'text' =>'text text');
$data['Author'] = array('id'=>$this->Session->read('User.id'));
$data['Category'] = array(array('title' => 'Test1'), array('title' => 'Test2'));
$this->Post->save($data);
|
|
|
Вернуться к началу |
|
 |
Dante
цитировать
Зарегистрирован: 01 Ноя 2007 15:31:31 Сообщения: 6
|
Добавлено: 20 Дек 2007 16:15:33 Заголовок сообщения: |
|
|
Понятно, спасибо за ответ. |
|
Вернуться к началу |
|
 |
|