2010-06-16 2 views
1

가장 간단한 업데이트 쿼리를 사용하려고하지만 Doctrine이 UPDATE 대신 INSERT 문을 실행합니다.Doctrine이 업데이트되어야 할 때 삽입합니다.

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

재미있는 점은 내가 티를 사용한다는 것입니다. 다른 모델에서 작동하며 정상적으로 작동합니다. 어쩌면이 작업을 위해 전체 배열 그래프를 가져와야합니다 (일대 다 관계의 다른 모델이 있음)?

답변

1

은, 당신의 모델 DO NOT 사용 __construct() 메소드를 반복하지 마십시오.

설명서를주의 깊게 읽으면 construct() 메서드를 사용해야 함을 알 수 있습니다 (앞에서 "__"이 없음). 대부분의 것들은 "__construct()"를 사용하고 parent :: __ construct()를 호출하는 동안 작동하지만 레코드 상태는 하나가 아니며 모든 종류의 문제를 일으킬 것입니다. 그 중 하나는 위에 설명되어 있습니다 :)

맞춰 우리는 교리 2.0 :)이 replace() 방법은 나를 위해 작동

+0

잘 모델과 엔티티에서 생성자를 사용하십시오. 저는 교리 1에 대해 모르지만 교리 2에서는 아무런 문제가 없습니다. – tomazahlin

+0

이 답변은 7 년 전에 작성되었습니다 :) –

0

Doctrine과 비슷한 혼란을 겪었습니다. DQL 업데이트 구문을 사용하여 끝까지 따라 할 에너지가 없었습니다.

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

때까지 기다려야합니다.

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

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

This should work. 
관련 문제