2016-04-06 24 views
0

當我嘗試通過教義將值存儲到數據庫與symfony時,doctrine產生一個字段的NULL雖然它已設置,我不知道爲什麼。學說生成NULL而不是設定值

實體: https://github.com/Invis00/pub/blob/master/OldbCompetitionstage.php

測試控制器:

public function compTest(){ 
    $em = $this->getDoctrine()->getManager(); 

    $object = new OldbCompetitionstage(); 
    $object->setName("name"); 
    $object->setNr(2); 
    $object->setOldbCompetitionid(2); 

    // Echo tells 2 
    echo $object->getOldbCompetitionid(); 

    $em->persist($object); 
    $em->flush(); 

    return $this->render('base.html.twig', array("current" => "pubmin") 
    ); 
} 

表:

compstageID int(11) 
name varchar(100) 
nr int(11) 
oldb_competitionID int(11) 
startDate datetime 
ipub_compstageID int(11) 

Symfony的探查告訴:

INSERT INTO oldb_competitionstage (name, nr, oldb_competitionID, startDate, ipub_compstageID) VALUES (?, ?, ?, ?, ?) 
    Parameters: { 1: name, 2: 2, 3: null, 4: null, 5: null } 

但爲什麼oldb_competitionid是NULL而不是2? 回聲告訴我它是2.

似乎競爭的映射信息是某種形式的原因這種行爲,但沒有錯誤告訴,我沒有看到它的問題。

+1

@Veve是完全正確的,你不能既定義'joinColumn '作爲您班級的成員,也不會將其值設置爲簡單列,無論是否帶有ORM。刪除此屬性或關聯。 – chalasr

回答

1

你的問題來自於$oldbCompetitionid在你的課堂上。它沒有任何理由存在,並且由於您指定了與ManyToOne ORM列定義中使用的列名相同的列名,因此會導致NULL

由於chalasrcommented

你不能既定義joinColumn作爲類的成員,也不 將其值設置爲簡單列,有或沒有ORM

刪除並檢查你的類之間的關係定義。

代碼的問題部分:

<?php 
namespace AppBundle\Entity; 
use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Validator\Constraints as Assert; 
use Doctrine\Common\Collections\ArrayCollection; 
/** 
* @ORM\Entity 
* @ORM\Table(name="oldb_competitionstage") 
*/ 
class OldbCompetitionstage 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="compstageID", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $compstageid; 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="oldb_competitionID", type="integer", nullable=true) 
    */ 
    private $oldbCompetitionid; 
    /** 
    * Mappings 
    */ 
    /** 
    * @ORM\ManyToOne(targetEntity="OldbCompetition", inversedBy="compstages") 
    * @ORM\JoinColumn(name="oldb_competitionID", referencedColumnName="competitionID") 
    */ 
    private $oldbCompetition; 

你應該有這樣的事情在你的OldbCompetition類:

<?php 
namespace AppBundle\Entity; 
use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Validator\Constraints as Assert; 
use Doctrine\Common\Collections\ArrayCollection; 
/** 
* @ORM\Entity 
* @ORM\Table(name="oldb_competitionstage") 
*/ 
class OldbCompetition 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="competitionID", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $compid; 
    /** 
    * @ORM\ManyToOne(targetEntity="OldbCompetition", mappedBy="oldbCompetition") 
    */ 
    private $compstages; 
+1

這就是它的感謝。 – Invis00