Я пытаюсь использовать, делают самый простой запрос на обновление, но Доктрина выпускает оператор INSERT вместо ОБНОВЛЕНИЯ.
$q = Doctrine_Query::create()
->from('Image i')
->where('id = ?');
$image = $q->fetchOne($articleId, Doctrine_Core::HYDRATE_RECORD);
$image->copyright = "some text";
$image->save();
Я также попытался использовать пример из руководства, но все еще новая запись вставляется:
$userTable = Doctrine_Core::getTable('User');
$user = $userTable->find(2);
if ($user !== false) {
$user->username = 'Jack Daniels';
$user->save();
}
править:
Этот пример от физических трудов:
$user = new User();
$user->assignIdentifier(1);
$user->username = 'jwage';
$user->save();
Забавная вещь состоит в том, что я использую это на другой модели, и там она работает хорошо. Возможно, я должен выбрать целый график массива для этого для работы (у меня есть другая модель в связи "один ко многим")?
Не, я повторяю НЕ используйте метод __construct () в своих моделях.
Если вы внимательно прочитаете руководство, то увидите, что вам следует использовать метод construct () (без «__» впереди). Большинство вещей будет работать при использовании «__construct ()» и вызове parent :: __ construct () внутри, но состояние записей не является одним из них, и это вызовет всевозможные проблемы в будущем, одна из них объяснена выше :)
Думаю, нам придется дождаться Доктрины 2.0 :)
У меня была аналогичная путаница с Доктриной. У меня не было сил, чтобы довести дело до конца, просто пришлось использовать синтаксис обновления DQL.
->update('User u')
->set('u.username', '?', 'Jack Daniels')
->where(....)