2010-06-16 59 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.