php - 使用 allocateIdentifier() 更新对象而不是使用 Doctrine 插入

标签 php mysql doctrine

我对 Doctrine 还很陌生,但据我了解,assignIdentifier() 方法应该告诉 Doctrine 将相关行更新到数据库中,而不是插入新行。

我有一个通过工作流程构建的对象,因此标识符的 idnull,直到我调用 $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();

最佳答案

正如我所知道的,save() 不会使用 ID 自动增量来更新现有记录。 我在使用 Doctrine 1.2 时也遇到同样的问题。

我使用这个的一个想法,我发现的唯一解决方法:

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

当一条记录位于 DN 中且primaryKey dealid = $this->object->transid 时,Thiw 将起作用。

问候我

关于php - 使用 allocateIdentifier() 更新对象而不是使用 Doctrine 插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3156338/

相关文章:

javascript - 重新加载页面部分时的 AJAX 请求

php - 使用 Go 解密使用 MCRYPT_RIJNDAEL_256 在 php 中加密的字符串

mysql - 如何连续获得最新的商品?

mysql - mysql中的存储过程语法有错误

php - laravel 4.2 发送电子邮件显示附件的自定义名称

php - 来自 3 个表的 SQL 报告,其中包含字段的 SUM

mysql JOIN 在 JOIN 内部并搜索 group_concatenated 值

mongodb - 坚持和冲洗 - Doctrine 和 MongoDB

php - Symfony 和 Doctrine : mapping entities that live outside of a bundle

php - Symfony 5 如何在具有多对多关系的更新中自动发送当前用户