Доктрина вставляет, когда она должна обновить

Я пытаюсь использовать, делают самый простой запрос на обновление, но Доктрина выпускает оператор 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();

Забавная вещь состоит в том, что я использую это на другой модели, и там она работает хорошо. Возможно, я должен выбрать целый график массива для этого для работы (у меня есть другая модель в связи "один ко многим")?

1
задан Goran Jurić 16 June 2010 в 16:28
поделиться

2 ответа

Не, я повторяю НЕ используйте метод __construct () в своих моделях.

Если вы внимательно прочитаете руководство, то увидите, что вам следует использовать метод construct () (без «__» впереди). Большинство вещей будет работать при использовании «__construct ()» и вызове parent :: __ construct () внутри, но состояние записей не является одним из них, и это вызовет всевозможные проблемы в будущем, одна из них объяснена выше :)

Думаю, нам придется дождаться Доктрины 2.0 :)

1
ответ дан 2 September 2019 в 23:44
поделиться

У меня была аналогичная путаница с Доктриной. У меня не было сил, чтобы довести дело до конца, просто пришлось использовать синтаксис обновления DQL.

->update('User u')
->set('u.username', '?', 'Jack Daniels')
->where(....)
0
ответ дан 2 September 2019 в 23:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: