草庐IT

php - 获取 "Integrity constraint violation: 1048 Column ' payment_id' cannot be null"using Doctrine & Symfony

coder 2024-05-03 原文

我已经被困了几天来处理这个问题。我一直在查看其他 StackOverflow 问题和不同的论坛,但我无法让它工作,所以这就是这个问题的原因。

我正在开发一个包含付款的系统,所以我创建了一个“付款”类,如下所示:

/**
 * Payment
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="PaymentRepository")
 */
 class Payment
 {

   /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @JMS\Groups({"public"})
     * @JMS\Type("integer")
     */
     protected $id;

   /**
     * @var ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="PaymentLine", mappedBy="payment", cascade={"persist",    "remove"})
     * @Assert\Valid()
     * @JMS\Groups({"public","create"})
     * @JMS\Type("ArrayCollection<JensenTech\PaymentBundle\Entity\PaymentLine>")
     */
     protected $paymentLines;

     /**
       * @var string
       *
       * @ORM\Column(name="total_net", type="decimal", precision=5, scale=2)
       * @Assert\NotBlank(message="Invalid Net Amount")
       * @JMS\Groups({"public","create"})
       */
       protected $totalNet;

     /**
       * @var string
       * @ORM\Column(name="total_vat", type="decimal", precision=5, scale=2)
       * @Assert\NotBlank(message="Invalid VAT Amount")
       * @JMS\Groups({"public","create"})
       */
       protected $totalVat;

      /**
        * @var string
        * @ORM\Column(name="total_gross", type="decimal", precision=5, scale=2)
        * @Assert\NotBlank(message="Invalid Gross Amount")
        * @JMS\Groups({"public","create"})
        */
        protected $totalGross;

}

我还创建了另一个名为 PaymentLine 的类来存储有关每个付款行的详细信息:

/**
  * PaymentLine
  *
  * @ORM\Table()
  * @ORM\Entity
  * @ORM\HasLifecycleCallbacks()
  */
  class PaymentLine
  {

   /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @JMS\Exclude()
     */
     protected $id;

   /**
     * @var Payment
     * @ORM\ManyToOne(targetEntity="Payment", inversedBy="paymentLines")
     * @ORM\JoinColumn(nullable=false)
     * @JMS\Exclude()
     */
     protected $payment;

   /**
     * @var string
     *
     * @ORM\Column(name="concept", type="string", length=255)
     * @JMS\Groups({"public", "create"})
     */
     protected $concept;

   /**
     * @var integer
     *
     * @ORM\Column(name="quantity", type="smallint")
     * @JMS\Groups({"public", "create"})
     */
     protected $quantity;

   /**
     * @var float
     *
     * @ORM\Column(name="unit_price", type="decimal", precision=5, scale=2)
     * @JMS\Groups({"public", "create"})
     */
    protected $unitPrice;
}

如您所见,这是一个 OneToMany 关联,此关联由表单处理以验证数据。数据通过验证后,我想将其存储在数据库中以供后续处理,因此我使用以下代码行来执行此操作:

 $payment = new Payment();
 $paymentForm = $this->createForm('payment', $payment);

 $paymentForm->handleRequest($request);

 if ($paymentForm->isValid()) {            

    $entityManager = $this->getDoctrine()->getManager();
    $entityManager->persist($payment);
    $entityManager->flush();
 }

此代码处理接收所有支付数据(支付数据和支付行数据)的表单以验证它们并存储在数据库中。当我执行此代码时,出现此错误:

SQLSTATE[23000]:违反完整性约束:1048 列“payment_id”不能为空

我们欢迎并感谢您的每一条建议。

提前谢谢你。

最佳答案

感谢 Keefe Kwan,我解决了我的问题。正如他在评论中所说,我的问题是由 Doctrine 生成的代码,更具体地说是“addPaymentLine”方法,该方法如下:

/**
 * Add paymentLines
 *
 * @param PaymentLine $paymentLines
 * @return Payment
 */
public function addPaymentLine(PaymentLine $paymentLines)
{
    $this->paymentLines[] = $paymentLines;

    return $this;
}

所以我编辑它添加了这一行:

$paymentLines->setPayment($this);

但只是补充说它不起作用,所以我看了一下 this other question ,而我在表单中没有“by_reference”参数,所以我的表单是这样的:

$builder
            ->add('payment_lines', 'collection',
                    [
                'type' => new PaymentLineType(),
                'allow_add' => true
                    ]
            )

所以添加该参数我的表单现在是这样的:

$builder
            ->add('payment_lines', 'collection',
                    [
                'type' => new PaymentLineType(),
                'allow_add' => true,
                'by_reference' => false
                    ]
            )

终于,我的问题解决了。谢谢你们的帮助。

问候

关于php - 获取 "Integrity constraint violation: 1048 Column ' payment_id' cannot be null"using Doctrine & Symfony,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26762132/

有关php - 获取 "Integrity constraint violation: 1048 Column ' payment_id' cannot be null"using Doctrine & Symfony的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  4. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  5. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  6. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  7. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  8. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  9. ruby - 多个属性的 update_column 方法 - 2

    我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2

  10. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

随机推荐