RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 599835
Accepted
vellmur
vellmur
Asked:2020-12-05 19:48:58 +0000 UTC2020-12-05 19:48:58 +0000 UTC 2020-12-05 19:48:58 +0000 UTC

冲洗后学说 id 为空

  • 772

我遇到了使用该学说的问题,意识到我没有完全理解它的工作机制。我有几个实体,主要的是客户(公司、公司、团队),这个客户有用户,但所有的动作都来自客户。它在任何地方都可以正常工作,但是对于某个交易实体,我会出错。
客户进行交易,然后我收到它并将其添加到付款中。但是,当我使用 merge、flush 编写事务时,由于某种原因事务有一个空的 id null,尽管所有内容都已正确写入数据库。

 public function createConfirmedTransaction(Client $client, PaymentMethod $method, $amount, $wallet, $invoice, $payment_code)
 {
    $status = $this->getStatus('confirmed');

    $transaction = new Transaction();

    $transaction->setClient($client);
    $transaction->setMethod($method);
    $transaction->setAmount($amount);
    $transaction->setWallet($wallet);
    $transaction->setInvoice($invoice);
    $transaction->setPaymentCode($payment_code);
    $transaction->setStatus($status);
    $transaction->setConfirmedAt(new \DateTime());

    $this->entityManager->merge($transaction);
    $this->entityManager->flush();

    return $transaction->getId();
 }  

在这里,我们创建了一个交易,然后我尝试将其记录为付款。

 public function createPayment(Client $client, PaymentMethod $method, Transaction $transaction, $usd)
 {
    $payment = new Payment();

    $payment->setTransaction($transaction);
    $payment->setClient($client);
    $payment->setMethod($method);
    $payment->setAmount($usd);

    $this->entityManager->merge($payment);
    $this->entityManager->flush();
 }  

但是会抛出一个错误:

通过关系“AppBundle\Entity\Payment#transaction”找到了一个新实体,该实体未配置为级联实体的持久操作。

事实证明,主义对数据库进行了插入,但不理解它做了什么,因为它没有收到事务 id,也没有看到它。接下来,我尝试沿着链进行持久事务,直到最后一个用户连接,当我坚持它时,该学说试图再次将用户插入数据库,尽管它在那里。
为什么在这种情况下合并不起作用并且坚持用户重新插入?

symfony2
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Arkemlar
    2020-01-20T16:52:20Z2020-01-20T16:52:20Z

    从给出的示例来看,广泛使用 merge 而不是 persist的动机尚不清楚,为了详细回答为什么观察到您描述的行为,我需要知道用户对象是如何获得的(显然是这个Client $client)和如何Transaction $transaction在createPayment. 为什么在 persist 期间插入新用户 - 我可以假设您是通过创建它new Client(),或者从缓存中获取它,或者以其他方式获取它,但以某种方式绕过了 EntityManager。

    要弄清楚发生了什么:

    1. 阅读描述 merge() 方法如何工作的文档。

    2. 在 Doctrine 中学习级联操作。有一次, Understanding Doctrine Cascade Operations和How to use the cascade option in Doctrine2 to have associated entities automatically persisted这两个问题的答案有助于理解他们工作的本质。,以及文档部分。

    您应该在对象上设置级联操作,并避免在新对象上使用合并。

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5