Doctrine应该更新时插入

时间:2010-06-16 14:41:30

标签: doctrine

我正在尝试使用最简单的更新查询,但是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 个答案:

答案 0 :(得分:1)

请勿重复不要在模型中使用__construct()方法。

如果您仔细阅读本手册,您将看到应该使用construct()方法(前面没有“__”)。大多数事情在使用“__construct()”并在其中调用parent :: __ construct()时会起作用,但记录状态不是它们中的一个,这将导致各种问题,其中一个问题如上所述:)

猜猜我们将不得不等待Doctrine 2.0:)

答案 1 :(得分:1)

replace()方法适用于我。

答案 2 :(得分:0)

我与Doctrine有类似的混淆。没有足够的精力来完成,只是结束了使用DQL更新语法。

->update('User u')
->set('u.username', '?', 'Jack Daniels')
->where(....)

答案 3 :(得分:0)

$q = Doctrine_Query::create()
->from('Image')
->where('id = ?' $id)
->fetchOne();

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

This should work.