Учение вставляет, когда оно должно обновляться - PullRequest
1 голос
/ 16 июня 2010

Я пытаюсь выполнить самый простой запрос на обновление, но Doctrine выдает инструкцию INSERT вместо UPDATE.

    $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();

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

Ответы [ 4 ]

1 голос
/ 16 июня 2010

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

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

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

1 голос
/ 13 января 2011

Метод replace() работает для меня.

0 голосов
/ 04 декабря 2011
$q = Doctrine_Query::create()
->from('Image')
->where('id = ?' $id)
->fetchOne();

$q->copyright = "some text";
$q->save();

This should work.
0 голосов
/ 16 июня 2010

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

->update('User u')
->set('u.username', '?', 'Jack Daniels')
->where(....)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...