与保持旧数据库有很多关系

时间:2016-12-31 19:28:14

标签: php doctrine many-to-many symfony

我必须将应用程序从zf1重写为sf2。 但我需要保留旧的数据库架构。 我和很多关系都有问题。

有两个实体:异常,区域,它太过Exceptionregions,但我删除了它。 数据库中有3个表 - 异常,区域和异常区域,它们是哈希表。 下面我附上关系屏幕:

screen with relations

我的代码: 1.例外实体:

// ClassFive doesn't just work with its dependency ClassOne, it works directly with its
// dependency's dependency's dependency ClassThree.
super(..., p, 
    p.getClsTwo().getClsThree().loadFileFromAssetStore("Default value"));
  1. 地区实体:

    <?php
    
    namespace AppBundle\Entity;
    
    use Doctrine\ORM\Mapping as ORM;
    use Doctrine\Common\Collections\ArrayCollection;
    
    /**
    * Exceptions
    *
    * @ORM\Table(name="Exceptions")
    * @ORM\Entity
    */
    class Exceptions
    {
    
    /**
     * @var integer
     *
     * @ORM\Column(name="ExceptionID", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $exceptionid;
    
    /**
     * Many exceptions have many regions.
     * @ORM\ManyToMany(targetEntity="Regions", inversedBy="exceptions")
     * @ORM\JoinTable(name="exceptionregions"),
     *     joinColumns={@ORM\JoinColumn(name="ExceptionID", referencedColumnName="ExceptionID")},
     *     inverseJoinColumns={@ORM\JoinColumn(name="RegionID", referencedColumnName="RegionID")}
     * )
     */   
    private $regions; 
    
    public function __construct()
    {
        $this->regions = new \Doctrine\Common\Collections\ArrayCollection();
    }
    
    /**
     * Add region
     *
     * @param AppBundle\Entity\Regions $region
     */
    public function addRegion(\AppBundle\Entity\Regions $regions)
    {
        $this->regions[] = $regions;
    }
    
    /**
     * Get regions
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getRegions()
    {
        return $this->regions;
    }
    
    ...
    
    }
    
  2. 我收到了这个错误:

    <?php
    
    namespace AppBundle\Entity;
    
    use Doctrine\ORM\Mapping as ORM;
    
    /**
     * Regions
     *
     * @ORM\Table(name="Regions")
     * @ORM\Entity
     */
    class Regions
    {
    
    /**
    * @var string
    *
    * @ORM\Column(name="RegionName", type="string", length=45, nullable=false)
    */
    private $regionname;
    
    /**
    * @var integer
    *
    * @ORM\Column(name="RegionID", type="integer")
    * @ORM\Id
    * @ORM\GeneratedValue(strategy="IDENTITY")
    */
    private $regionid;
    
    /**
    * @ORM\ManyToMany(targetEntity="Exceptions", mappedBy="regions")
    */
    private $exceptions;
    
    ...
    }
    

    当然,实体例外与少数实体有关,而不仅仅是地区。 我遇到了这个问题,我无法解决这个问题并继续我的项目。 任何人都知道如何修复这个或任何建议?我究竟做错了什么? 我很感激任何评论。

2 个答案:

答案 0 :(得分:0)

你是否尝试过这样的双向关系:

class Exceptions{
...
    /**
     * Many exceptions have many regions.
     * @ORM\ManyToMany(targetEntity="Regions", inversedBy="exceptions")
     * @ORM\JoinTable(name="regions_exceptions")
     */   
    private $regions;
class Regions{
...
    /**
    * @ORM\ManyToMany(targetEntity="Exceptions", mappedBy="regions")
    */
    private $exceptions;

不确定这是否有效,但您可以尝试吗。

此处的文档: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-bidirectional

**编辑#2 ** 你能试试这个改变吗?

class Exceptions
{

   /**
     * @var integer
     *
     * @ORM\Id
     * @ORM\Column(name="ExceptionID", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $exceptionid;

此外,如果这不起作用,请尝试:

php bin/console doctrine:schema:update --force

答案 1 :(得分:0)

我找到了解决这个问题的方法。 也许有人也会从中受益。

所以,工作代码:

/**
 * Many exceptions have many regions.
 * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Regions", inversedBy="exceptions")
 * @ORM\JoinTable(name="exceptionregions",
 *  joinColumns={
 *      @ORM\JoinColumn(name="ExceptionID", referencedColumnName="ExceptionID")
 *  },
 *  inverseJoinColumns={
 *      @ORM\JoinColumn(name="RegionID", referencedColumnName="RegionID")
 *  })
 */   
private $regions;

@Alvin,谢谢你的承诺。