2016-04-06 2 views
0

Когда я пытаюсь сохранить значения в DB с помощью symfony через доктрину, doctrine создает NULL для поля, хотя он установлен, и я понятия не имею, почему.Doctrine генерирует NULLinstead установленного значения

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

Controller Test:

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 Profiler говорит:

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? echo говорит мне, что это 2.

Кажется, что информация о сопоставлении для соревнований является чем-то вроде причины такого поведения, но ошибок нет, и я не вижу проблемы с ним.

+1

@Veve совершенно правильно, вы не можете ни определить 'joinColumn 'как член вашего класса и не устанавливайте его значение как простой столбец с ORM или без него. Удалите это свойство или ассоциацию. – chalasr

ответ

1

Ваша проблема исходит от $oldbCompetitionid в вашем классе. У этого нет никакой причины существовать, и поскольку вы назначили то же имя столбца, что и имя, используемое в определении столбца ManyToOne ORM, оно вызывает NULL.

Как chalasrcommented,

вы не можете ни определить joinColumn в качестве члена своего класса, ни установить его значение в качестве простого столбца, с или без ОРМ

Удалить это и проверьте определения отношений между вашими классами.

Проблемная часть кода:

<?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

Смежные вопросы