2010-06-16 65 views
1

我想使用做最简单的更新查询,但学说发出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(); 

有趣的是,我用thi在另一个模型上,它的工作正常。也许我必须获取整个数组图才能工作(我在另一个模型中有一对多的关系)?

回答

1

不要,我再说一遍切勿使用__construct()方法在你的模型。

如果仔细阅读本手册,您会发现应该使用construct()方法(前面没有“__”)。大多数的东西在使用“__construct()”并在里面调用parent :: __ construct()时会起作用,但是记录状态不是它们中的一个,这会导致各种各样的问题,其中之一就是上面的解释:)

想我们不得不等待学说2.0 :)

+0

在模型和实体中使用构造函数。我不知道教义1,但在教义2中没有任何问题。 – tomazahlin 2017-08-22 13:14:38

+0

这个答案写得比7年前更多:) – 2017-09-08 15:58:31

0

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

->update('User u') 
->set('u.username', '?', 'Jack Daniels') 
->where(....) 
0
$q = Doctrine_Query::create() 
->from('Image') 
->where('id = ?' $id) 
->fetchOne(); 

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

This should work.