2010-07-01 47 views
0

我很新的教义,但据我所知,assignIdentifier()方法应该告诉Doctrine更新相关行到数据库,而不是插入一个新的。更新对象,而不是使用指示插入使用assignIdentifier()

我有我通过工作流构建一个对象,所以标识具有的nullid直到我打电话$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(); 

回答

0

通常,如果您检索的记录,你可以用save()方法更新。学说认识到这一点(因为PK不会改变)并更新记录。

docs

更新对象是很容易的,你 只需调用Doctrine_Record ::保存()方法

另一种方式可以是replace(),但我通常只使用save(),如果记录已经存在,则执行保存或更新。

据我所知,assignIdentifier()的描述从来没有用过),它只能用于通过ID检索对象,所以用这种方法更新某些东西是行不通的。

2

就像我所知道的,save()不会使用ID上的自动增量更新现有记录。 我有使用原则1.2相同的问题。

的想法,我有使用这一个,唯一的workaroung我发现:当一个记录是DN与PrimaryKey的dealid = $这个 - >对象 - > TRANSID

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

Thiw将起作用。

问候m