Symfony2 / Doctrine - 设置外键值

时间:2014-09-08 20:25:01

标签: symfony orm doctrine

我遇到了像here这样的问题。我按照给定解决方案的指示,但它产生了另一个问题。

我有两个实体:

namespace Acme\TyperBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
 use Doctrine\Common\Collections\ArrayCollection;

/**
 * Mecz
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Mecz
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="druzyna1", type="string", length=255)
     */
    private $druzyna1;

    /**
     * @var string
     *
     * @ORM\Column(name="druzyna2", type="string", length=255)
     */
    private $druzyna2;

    /**
     * @var int
     *
     * @ORM\Column(name="bramki1", type="integer")
     */
    private $bramki1;

    /**
     * @var int
     *
     * @ORM\Column(name="bramki2", type="integer")
     */
    private $bramki2;

    /**
     * @var string
     *
     * @ORM\Column(name="wyniktyp", type="string", length=2)
     */
    private $wyniktyp;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="data", type="datetime")
     */
    private $data;

    /**
     * @var int
     *
     * @ORM\Column(name="typ1", type="float")
     */
    private $typ1;

    /**
     * @var int
     *
     * @ORM\Column(name="typ1x", type="float")
     */
    private $typ1x;

    /**
     * @var int
     *
     * @ORM\Column(name="typ2", type="float")
     */
    private $typ2;

    /**
     * @var int
     *
     * @ORM\Column(name="typ2x", type="float")
     */
    private $typ2x;

    /**
     * @var int
     *
     * @ORM\Column(name="typx", type="float")
     */
    private $typx;

     /**

      * @ORM\OneToMany(targetEntity="Typy", mappedBy="meczid")
      */
     protected $meczid;

     public function __construct()
     {
         $this->products = new ArrayCollection();
     }



    /**
     * Get id
     *
     * @return integer 
     */

    public function getId()
    {
        return $this->id;
    }

    /**
     * Set druzyna1
     *
     * @param string $druzyna1
     * @return Mecz
     */
    public function setDruzyna1($druzyna1)
    {
        $this->druzyna1 = $druzyna1;

        return $this;
    }

    /**
     * Get druzyna1
     *
     * @return string 
     */
    public function getDruzyna1()
    {
        return $this->druzyna1;
    }

    /**
     * Set druzyna2
     *
     * @param string $druzyna2
     * @return Mecz
     */
    public function setDruzyna2($druzyna2)
    {
        $this->druzyna2 = $druzyna2;

        return $this;
    }

    /**
     * Get druzyna2
     *
     * @return string 
     */
    public function getDruzyna2()
    {
        return $this->druzyna2;
    }

    /**
     * Set bramki1
     *
     * @param integer $bramki1
     * @return Mecz
     */
    public function setBramki1($bramki1)
    {
        $this->bramki1 = $bramki1;

        return $this;
    }

    /**
     * Get bramki1
     *
     * @return integer 
     */
    public function getBramki1()
    {
        return $this->bramki1;
    }

    /**
     * Set bramki2
     *
     * @param integer $bramki2
     * @return Mecz
     */
    public function setBramki2($bramki2)
    {
        $this->bramki2 = $bramki2;

        return $this;
    }

    /**
     * Get bramki2
     *
     * @return integer
     */
    public function getBramki2()
    {
        return $this->bramki2;
    }

    /**
     * Set wyniktyp
     *
     * @param string $wyniktyp
     * @return Mecz
     */
    public function setWyniktyp($wyniktyp)
    {
        $this->wyniktyp = $wyniktyp;

        return $this;
    }

    /**
     * Get wyniktyp
     *
     * @return string 
     */
    public function getWyniktyp()
    {
        return $this->wyniktyp;
    }

    /**
     * Set data
     *
     * @param \DateTime $data
     * @return Mecz
     */
    public function setData($data)
    {
        $this->data = $data;

        return $this;
    }

    /**
     * Get data
     *
     * @return \DateTime 
     */
    public function getData()
    {
        return $this->data;
    }

     /**
     * Set typ1
     *
     * @param float $typ1
     * @return Mecz
     */
    public function setTyp1($typ1)
    {
        $this->typ1 = $typ1;

        return $this;
    }

    /**
     * Get typ1
     *
     * @return float
     */
    public function getTyp1()
    {
        return $this->typ1;
    }

      /**
     * Set typ2
     *
     * @param float $typ2
     * @return Mecz
     */
    public function setTyp2($typ2)
    {
        $this->typ2 = $typ2;

        return $this;
    }

    /**
     * Get typ2
     *
     * @return float
     */
    public function getTyp2()
    {
        return $this->typ2;
    }

      /**
     * Set typ1x
     *
     * @param float $typ1x
     * @return Mecz
     */
    public function setTyp1x($typ1x)
    {
        $this->typ1x = $typ1x;

        return $this;
    }

    /**
     * Get typ1x
     *
     * @return float
     */
    public function getTyp1x()
    {
        return $this->typ1x;
    }

      /**
     * Set typ2x
     *
     * @param float $typ2x
     * @return Mecz
     */
    public function setTyp2x($typ2x)
    {
        $this->typ2x = $typ2x;

        return $this;
    }

    /**
     * Get typ2x
     *
     * @return float
     */
    public function getTyp2x()
    {
        return $this->typ2x;
    }

      /**
     * Set typx
     *
     * @param float $typx
     * @return Mecz
     */
    public function setTypx($typx)
    {
        $this->typx = $typx;

        return $this;
    }

    /**
     * Get typx
     *
     * @return float
     */
    public function getTypx()
    {
        return $this->typx;
    }

    /**
     * Set id
     *
     * @param integer $id
     * @return Mecz
     */
    public function setId($id)
    {
        $this->id = $id;

        return $this;
    }

    /**
     * Add meczid
     *
     * @param \Acme\TyperBundle\Entity\Typy $meczid
     * @return Mecz
     */
    public function addMeczid(\Acme\TyperBundle\Entity\Typy $meczid)
    {
        $this->meczid[] = $meczid;

        return $this;
    }

    /**
     * Remove meczid
     *
     * @param \Acme\TyperBundle\Entity\Typy $meczid
     */
    public function removeMeczid(\Acme\TyperBundle\Entity\Typy $meczid)
    {
        $this->meczid->removeElement($meczid);
    }

    /**
     * Get meczid
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getMeczid()
    {
        return $this->meczid;
    }

    /**
     * Add mecz
     *
     * @param \Acme\TyperBundle\Entity\Typy $mecz
     * @return Mecz
     */
    public function addMecz(\Acme\TyperBundle\Entity\Typy $mecz)
    {
        $this->mecz[] = $mecz;

        return $this;
    }

    /**
     * Remove mecz
     *
     * @param \Acme\TyperBundle\Entity\Typy $mecz
     */
    public function removeMecz(\Acme\TyperBundle\Entity\Typy $mecz)
    {
        $this->mecz->removeElement($mecz);
    }

    /**
     * Get mecz
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getMecz()
    {
        return $this->mecz;
    }

    /**
     * Add mecztyp
     *
     * @param \Acme\TyperBundle\Entity\Typy $mecztyp
     * @return Mecz
     */
    public function addMecztyp(\Acme\TyperBundle\Entity\Typy $mecztyp)
    {
        $this->mecztyp[] = $mecztyp;

        return $this;
    }

    /**
     * Remove mecztyp
     *
     * @param \Acme\TyperBundle\Entity\Typy $mecztyp
     */
    public function removeMecztyp(\Acme\TyperBundle\Entity\Typy $mecztyp)
    {
        $this->mecztyp->removeElement($mecztyp);
    }

    /**
     * Get mecztyp
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getMecztyp()
    {
        return $this->mecztyp;
    }
}

namespace Acme\TyperBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Typy
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Typy
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var integer
     *
     * @ORM\Column(name="id_kuponu", type="integer")
     */
    private $id_kuponu;

     /**
     * @var integer
     *
     * @ORM\Column(name="id_meczu", type="integer")
     */
    private $id_meczu;



    /**
     * @var string
     *
     * @ORM\Column(name="typ", type="string", length=2)

     */
    private $typ;

     /**
     * @var int
     *
     * @ORM\Column(name="stawka", type="float")
     */
    private $stawka;

      /**
      * @ORM\ManyToOne(targetEntity="Mecz", inversedBy="meczid",cascade={"persist"})
      * @ORM\JoinColumn(name="id_meczu", referencedColumnName="id")
      */
    private $meczid;




    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set id_kuponu
     *
     * @param integer $idKuponu
     * @return Typy
     */
    public function setIdKuponu($idKuponu)
    {
        $this->id_kuponu = $idKuponu;

        return $this;
    }

    /**
     * Get id_kuponu
     *
     * @return integer 
     */
    public function getIdKuponu()
    {
        return $this->id_kuponu;
    }

    /**
     * Set id_meczu
     *
     * @param integer $idMeczu
     * @return Typy
     */
    public function setIdMeczu($idMeczu)
    {
        $this->id_meczu = $idMeczu;

        return $this;
    }

    /**
     * Get id_meczu
     *
     * @return integer 
     */
    public function getIdMeczu()
    {
        return $this->id_meczu;
    }

    /**
     * Set typ
     *
     * @param string $typ
     * @return Typy
     */
    public function setTyp($typ)
    {
        $this->typ = $typ;

        return $this;
    }

    /**
     * Get typ
     *
     * @return string 
     */
    public function getTyp()
    {
        return $this->typ;
    }

    /**
     * Set meczid
     *
     * @param \Acme\TyperBundle\Entity\Mecz $meczid
     * @return Typy
     */
    public function setMeczid(\Acme\TyperBundle\Entity\Mecz $meczid = null)
    {
        $this->meczid = $meczid;

        return $this;
    }

    /**
     * Get meczid
     *
     * @return \Acme\TyperBundle\Entity\Mecz 
     */
    public function getMeczid()
    {
        return $this->meczid;
    }

    /**
     * Set stawka
     *
     * @param float $stawka
     * @return Typy
     */
    public function setStawka($stawka)
    {
        $this->stawka = $stawka;

        return $this;
    }

    /**
     * Get stawka
     *
     * @return float 
     */
    public function getStawka()
    {
        return $this->stawka;
    }
}

所以我想使用这段代码将数据插入到表中:

 $mecz = new Mecz();
       $mecz->setId($id_meczu);

        $typs = new Typy();

        $et = $this->getDoctrine()->getManager();
        $typs->setIdKuponu($id_kuponu);
        $typs->setMeczid($mecz);
        $typs->setTyp($typ);           
        $typs->setStawka($stawka);

        $et->persist($typs);
        $et->flush();

我得到例外:

An exception occurred while executing 'INSERT INTO Mecz (id, druzyna1, druzyna2, bramki1, bramki2, wyniktyp, data, typ1, typ1x, typ2, typ2x, typx) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["2", null, null, null, null, null, null, null, null, null, null, null]:

我不知道为什么,因为我想将数据存入“Typy”表而不是“Mecz”表。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

问题如下:

您有字段Typy::meczid,但此字段(来自Doctrine的透视图)不包含数字ID,而是对Mecz实例的引用。因此,meczid这个名称具有误导性,应该是Typy::mecz。为了保持一致性,我建议重命名字段和访问器。

现在,Typy实体需要设置Mecz实体,您可以这样做:创建new Mecz(),并使用{{1}将其分配给Typy }。但是:$typs->setMeczid($mecz);实例缺少除ID之外的所有属性。 (顺便说一下,Doctrine ID通常应该是自动生成的,而不是业务逻辑。)由于Typy实体依赖于Mecz,Mecz必须首先保留,因此它的引用可以与Typy一起存储。

底线:您必须使用缺少的属性填充生成的Mecz

提示:为了避免在数据库级别上发生此类错误,您应该使用Symfony's entity validation component。这将允许更好的错误处理;无论是在开发过程中还是在生产过程中。