我必须将应用程序从zf1重写为sf2。 但我需要保留旧的数据库架构。 我和很多关系都有问题。
有两个实体:异常,区域,它太过Exceptionregions,但我删除了它。 数据库中有3个表 - 异常,区域和异常区域,它们是哈希表。 下面我附上关系屏幕:
我的代码: 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"));
地区实体:
<?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;
}
...
}
我收到了这个错误:
<?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;
...
}
当然,实体例外与少数实体有关,而不仅仅是地区。 我遇到了这个问题,我无法解决这个问题并继续我的项目。 任何人都知道如何修复这个或任何建议?我究竟做错了什么? 我很感激任何评论。
答案 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;
不确定这是否有效,但您可以尝试吗。
**编辑#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,谢谢你的承诺。