为了清晰起见,我省去了getter和setter。
$ shotObj-> setShotstart(date_create($ postData ['start'])); $ shotObj-> setShotend(date_create($ postData ['end'])); $ shotObj-> setC2p($ postData ['c2p']); $ shotObj-> setUniqueid((uniqid('',true))); $ shotForm = $ this-> createFormBuilder($ shotObj) - > add('status','choice',array('choices '=>数组('changed'=>'已更改','取消'=>'已取消','added'=>'添加'),'multiple'=> false,'expanded'=> false,'required'=> false,'占位符'=> - ')) - > add('c2p','hidden') - > add('shotStart','datetime',array('attr '=>数组('style'=>'display:none'))) - > add('shotEnd','datetim e',array('attr'=> array('style'=> '显示:none'))) - > add('uniqueid','hidden') - > add('baseline','choice' array('choices'=> $ this-> buildBLChoices(),'multiple'=> false,'expanded'=> false,'占位符'=>' - ')) - > add('testevent','choice',array('choices'=> $ this-> buildTEChoices )'multiple'=> false,'expanded'=> false,'required'=> false,'placeholder'=>' - ')) - > add('test','text',array('mapped'=> false,'required'=& se )) - > add('assignedTo','entity',array('class'=> 'ftiwebBundle:Employees','query_builder'=>函数(EntityRepository $ er){ return $ er-> createQueryBuilder('e') - >其中('e.active = 1') - > orderBy e.lastname','ASC'); } ,'multiple'=> false,'expanded'=> false,'placeholder'=> '''')) - > add('ui','entity',array('class'=>'ftiwebBundle:Employees',' query_builder'=> function(EntityRepository $ er){ return $ er-> createQueryBuilder('e') - >其中('e.active = 1') - > orderBy('e.lastname','ASC'); } ,'multiple'=> false,'expanded'=> false,'占位符'=>' - ',)) - > add('notes','textarea') - > add('submit'提交') - > add('SubmitAndAlert','submit') - > getForm(); $ shotForm-> handleRequest($ request); if($ shotForm-> isValid()){ $ formData = $ request-> request-> get('form'); if($ formData ['test']){ $ shotObj-> setTestevent($ formData ['test']); } $ em-> persist($ shotObj); $ em-> flush(); }返回的错误是:执行' INSERT INTO指标(baseline,testEvent,status,shotStart,shotEnd,c2p,notes,date,ui,assignedTo)VALUES(?,?,?,?,?,?,?,?,?,?) foo,foo,null,2015-03-03 00:30:00,2015-03-03 02:30:00,foo,test,null,18,21] :
如你所见,主键(uniqueId)不在要插入的列中,这导致我相信它的映射任何帮助将非常感谢
解决方案感谢所有的帮助。最终答案是,在orct.xml的orm.xml文件中,生成的值永远不会改变,我在xml文档中手动删除了generatevalue。之后,插入DML语句工作正常,我看到DB中的行。 orm.xml文件位于Bundle / Resources / config / doctrine目录中。
I am working on a PHP Project, utilizing Symfony 2, and Doctrine as ORM. When I persist and flush the object the primary key column is not even in the insert SQL DML Statement, and of course an error is thrown. The ID is a generated value, using PHP's uniqid. I will provide the Entity and a code snippet of the controller.
/** * Metrics * * @ORM\Table(name="metrics", indexes={@ORM\Index(name="metrics_assignedTo_fk", columns={"assignedTo"}), @ORM\Index(name="metrics_ui_fk", columns={"ui"})}) * @ORM\Entity */ class Metrics { /** * @var string * * @ORM\Column(name="baseline", type="string", length=15, nullable=true) */ private $baseline; /** * @var string * * @ORM\Column(name="testEvent", type="string", length=40, nullable=true) */ private $testevent; /** * @var string * * @ORM\Column(name="status", type="string", length=20, nullable=true) */ private $status; /** * @var \DateTime * * @ORM\Column(name="date", type="date", nullable=true) */ private $date; /** * @var \DateTime * * @ORM\Column(name="shotStart", type="datetime", nullable=true) */ private $shotstart; /** * @var \DateTime * * @ORM\Column(name="shotEnd", type="datetime", nullable=true) */ private $shotend; /** * @var string * * @ORM\Column(name="c2p", type="string", length=10, nullable=true) */ private $c2p; /** * @var string * * @ORM\Column(name="notes", type="string", length=200, nullable=true) */ private $notes; /** * @var string * * @ORM\Column(name="uniqueid", type="string", length=100, nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="NONE") */ private $uniqueid; /** * @var \fti\webBundle\Entity\Employees * * @ORM\ManyToOne(targetEntity="fti\webBundle\Entity\Employees") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="ui", referencedColumnName="empid") * }) */ private $ui; }I left out the getters and setters for clarity.
$shotObj->setShotstart(date_create($postData['start'])); $shotObj->setShotend(date_create($postData['end'])); $shotObj->setC2p($postData['c2p']); $shotObj->setUniqueid((uniqid('', true))); $shotForm = $this->createFormBuilder($shotObj) ->add('status', 'choice', array( 'choices' => array( 'changed' => 'Changed', 'canceled' => 'Canceled', 'added' => 'Added' ), 'multiple' => false, 'expanded' => false, 'required' => false, 'placeholder' => '-' )) ->add('c2p', 'hidden') ->add('shotStart', 'datetime', array( 'attr' => array( 'style' => 'display: none' ) )) ->add('shotEnd', 'datetime', array( 'attr' => array( 'style' => 'display: none' ) )) ->add('uniqueid', 'hidden') ->add('baseline', 'choice', array( 'choices' => $this->buildBLChoices(), 'multiple' => false, 'expanded' => false, 'placeholder' => '-' )) ->add('testevent', 'choice', array( 'choices' => $this->buildTEChoices(), 'multiple' => false, 'expanded' => false, 'required' => false, 'placeholder' => '-' )) ->add('test', 'text', array( 'mapped' => false, 'required' => false )) ->add('assignedTo', 'entity', array( 'class' => 'ftiwebBundle:Employees', 'query_builder' => function(EntityRepository $er){ return $er->createQueryBuilder('e') ->where('e.active = 1') ->orderBy('e.lastname', 'ASC'); } , 'multiple' => false, 'expanded' => false, 'placeholder' => '-', )) ->add('ui', 'entity', array( 'class' => 'ftiwebBundle:Employees', 'query_builder' => function(EntityRepository $er){ return $er->createQueryBuilder('e') ->where('e.active = 1') ->orderBy('e.lastname', 'ASC'); } , 'multiple' => false, 'expanded' => false, 'placeholder' => '-', )) ->add('notes', 'textarea') ->add('submit', 'submit') ->add('SubmitAndAlert', 'submit') ->getForm(); $shotForm->handleRequest($request); if($shotForm->isValid()) { $formData = $request->request->get('form'); if ($formData['test']) { $shotObj->setTestevent($formData['test']); } $em->persist($shotObj); $em->flush(); }The error that returns is: An exception occurred while executing 'INSERT INTO metrics (baseline, testEvent, status, shotStart, shotEnd, c2p, notes, date, ui, assignedTo) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["foo", "foo", null, "2015-03-03 00:30:00", "2015-03-03 02:30:00", "foo", "test", null, 18, 21]:
As you see, the primary key (uniqueId) is not in the columns to be inserted, which leads me to believe its mapping Any help would be greatly appreciated
解决方案Thanks for all the help guys. The answer ended up being, in the orm.xml files for doctrine, the generatedvalue would never change, I manually removed the generatedvalue, in the xml document. After this, the insert DML statement worked correctly, and I see the row in my DB. The orm.xml file is in the Bundle/Resources/config/doctrine directory.
更多推荐
当flush()主键未插入时
发布评论