Symfony Doctrine update命令在单向多对一关联中不创建外键

时间:2016-11-22 12:38:10

标签: symfony doctrine synchronization foreign-keys

我有以下问题 - 我在MySQL数据库中有一个表object_types,在我的Symfony 3.2项目中有两个实体 - ObjectObjectType。我刚刚同步了对象类型,现在我想对使用php bin/console doctrine:schema:update --complete命令的对象执行相同操作,但它不会在表之间创建外键。

以下是Object类:

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Object
 *
 * @ORM\Table(name="object")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ObjectRepository")
 */
class Object
{
    /**
     * @var int
     *
     * @ORM\Column(name="objectID", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $ID;

    /**
     * @var int
     *
     * @ORM\Column(name="object_typeID", type="integer")
     * @ORM\ManyToOne(targetEntity="ObjectType")
     * @ORM\JoinColumn(name="object_typeID", referencedColumnName="object_typeID")
     */
    private $typeID;

    /**
     * @var string
     *
     * @ORM\Column(name="object_title", type="string", length=128)
     */
    private $title;

    /**
     * @var string
     *
     * @ORM\Column(name="object_path", type="text")
     */
    private $path;

    /**
     * @var bool
     *
     * @ORM\Column(name="object_active", type="boolean")
     */
    private $active;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="object_added", type="datetime", nullable=true)
     */
    private $added;

    ....
}

对象类型:

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * ObjectType
 *
 * @ORM\Table(name="object_types")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ObjectTypeRepository")
 */
class ObjectType
{
    /**
     * @var int
     * 
     * @ORM\Id
     * @ORM\Column(name="object_typeID", type="integer", unique=true)
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $typeID;

    /**
     * @var string
     *
     * @ORM\Column(name="object_type_name", type="string", length=45)
     */
    private $typeName;

如何实现我的目标?

1 个答案:

答案 0 :(得分:0)

尝试以下

<强>多对一

   /**
     * @var int
     *
     * @ORM\ManyToOne(targetEntity="ObjectType", inversedBy="object")
     * @ORM\JoinColumn(name="object_typeID", referencedColumnName="id")
     */
    private $typeID;

<强>一对多

   /**
     * @ORM\OneToMany(targetEntity="Object", mappedBy="typeID")
     */
    protected $object;

您的实体应如下所示。

<强>对象

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Object
 *
 * @ORM\Table(name="object")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ObjectRepository")
 */
class Object
{
    /**
     * @var int
     *
     * @ORM\Column(name="objectID", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $ID;

    /**
     * @var int
     *
     * @ORM\ManyToOne(targetEntity="ObjectType", inversedBy="object")
     * @ORM\JoinColumn(name="object_typeID", referencedColumnName="id")
     */
    private $typeID;

    /**
     * @var string
     *
     * @ORM\Column(name="object_title", type="string", length=128)
     */
    private $title;

    /**
     * @var string
     *
     * @ORM\Column(name="object_path", type="text")
     */
    private $path;

    /**
     * @var bool
     *
     * @ORM\Column(name="object_active", type="boolean")
     */
    private $active;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="object_added", type="datetime", nullable=true)
     */
    private $added;

    ....
}

<强>对象类型

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * ObjectType
 *
 * @ORM\Table(name="object_types")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ObjectTypeRepository")
 */
class ObjectType
{
    /**
     * @var int
     * 
     * @ORM\Id
     * @ORM\Column(name="id", type="integer", unique=true)
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="object_type_name", type="string", length=45)
     */
    private $typeName;

    /**
     * @ORM\OneToMany(targetEntity="Object", mappedBy="typeID")
     */
    protected $object;

希望它应该可以正常工作。