Обновление объекта вместо вставки с помощью Doctrine с использованием assignIdentifier () - PullRequest
0 голосов
/ 01 июля 2010

Я довольно новичок в Doctrine, но, насколько я понимаю, метод assignIdentifier() должен указывать Doctrine обновить соответствующую строку в базе данных вместо вставки новой.

У меня естьобъект, который я создаю через рабочий процесс, поэтому у идентификатора есть id из null, пока я не вызову $object->save();, который вставляет его, и это работает.

Если, однако, я вызываю $object->assignIdentifier($newobj->id); а затем $object->save(); он ничего не делает - он не вставляет новую строку и не обновляет старую.

Если определенное условие выполняется, я хочу извлечь другую запись из БД иобновите эту строку вместо вставки новой.

Я понимаю, что здесь что-то не так?

Какой-то код для иллюстрации:

if($this->object->payments > 0) {           
    $older_payment = Doctrine_Query::create()
       ->from('OldPaid p')
       ->where('p.dealid = ?', $this->object->transid)
       ->fetchOne()
    ;

    $this->object->assignIdentifier($older_payment->id);
}

$this->object->save();

Ответы [ 2 ]

2 голосов
/ 30 декабря 2010

Как я узнал, save () не будет обновлять существующую запись с автоинкрементом по ID.У меня та же проблема с использованием доктрины 1.2.

идея, которую я использую, единственная найденная мною работа:

$query = Doctrine_Query::create()->update('OldPaid');
$query->set($yourFieldname, '?', $yourValue);
$query->addwhere('p.dealid = ?', $this->object->transid);
$query->execute();

Thiw будет работать, когда запись в DN сprimaryKey dealid = $ this-> object-> transid.

приветствие m

0 голосов
/ 02 июля 2010

Обычно, если вы извлекаете запись, вы можете обновить ее с помощью метода save(). Доктрина признает это (так как PK не изменяется) и обновляет запись.

Из документов :

Обновление объектов очень просто, вы просто вызовите Doctrine_Record :: save () Метод

Другим способом может быть replace(), но я обычно использую только save() и выполняет либо сохранение, либо обновление, если запись уже существует.

Насколько я могу прочитать из описания assignIdentifier() никогда не использовал его сам) он будет работать только с получением объекта по его идентификатору, поэтому обновление чего-либо с помощью этого метода не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...