与 Doctrine 实体的矩阵类型映射
Matrix type mapping with Doctrine entities
我有点问题。我正在使用 Doctrine 2 实体对数据库结构进行建模,但我被一种关系所困。
我需要在数据库中表示的是像table这样的矩阵:
| |A|B|C|D|
|A| x
|B|x x
|C| x x
|D| x
table 显示的是其他优惠的可用优惠(x=true,空=false)。
我试图做的是多对多与学说的关系,希望这会生成一个映射 table,但学说不会那样做。
这是我的实体:
/**
* @ORM\Entity @ORM\HasLifecycleCallbacks
* @ORM\Entity(repositoryClass="Core\Repository\Main")
* @ORM\Table(name="offer_availability")
*/
class OfferAvailability implements JsonSerializable
{
/**
* @var int
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @var String
* @ORM\Column(type="string")
*/
protected $name;
/**
* @var \Doctrine\Common\Collections\Collection
* @ORM\ManyToMany(targetEntity="Core\Entity\Offers\OfferAvailability", mappedBy="availableWith", inversedBy="availableWith", fetch="EXTRA_LAZY")
*/
protected $availableWith;
我知道我可以手动创建映射 table 实体并使用一对多关系。但我想知道是否有更聪明的方法来解决这个问题。
没关系,我已经找到问题了。在这种情况下创建映射只会混淆 Doctrine。删除映射和反转完全解决了问题:
/**
* @var \Doctrine\Common\Collections\Collection
* @ORM\ManyToMany(targetEntity="Core\Entity\Offers\OfferAvailability", fetch="EXTRA_LAZY")
*/
protected $availableWith;
这生成了一个映射 table:
------------------------------------
|offeravailablity_offeravailability|
------------------------------------
|offeravailability_source |
|offeravailability_target |
------------------------------------
我有点问题。我正在使用 Doctrine 2 实体对数据库结构进行建模,但我被一种关系所困。
我需要在数据库中表示的是像table这样的矩阵:
| |A|B|C|D|
|A| x
|B|x x
|C| x x
|D| x
table 显示的是其他优惠的可用优惠(x=true,空=false)。 我试图做的是多对多与学说的关系,希望这会生成一个映射 table,但学说不会那样做。 这是我的实体:
/**
* @ORM\Entity @ORM\HasLifecycleCallbacks
* @ORM\Entity(repositoryClass="Core\Repository\Main")
* @ORM\Table(name="offer_availability")
*/
class OfferAvailability implements JsonSerializable
{
/**
* @var int
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @var String
* @ORM\Column(type="string")
*/
protected $name;
/**
* @var \Doctrine\Common\Collections\Collection
* @ORM\ManyToMany(targetEntity="Core\Entity\Offers\OfferAvailability", mappedBy="availableWith", inversedBy="availableWith", fetch="EXTRA_LAZY")
*/
protected $availableWith;
我知道我可以手动创建映射 table 实体并使用一对多关系。但我想知道是否有更聪明的方法来解决这个问题。
没关系,我已经找到问题了。在这种情况下创建映射只会混淆 Doctrine。删除映射和反转完全解决了问题:
/**
* @var \Doctrine\Common\Collections\Collection
* @ORM\ManyToMany(targetEntity="Core\Entity\Offers\OfferAvailability", fetch="EXTRA_LAZY")
*/
protected $availableWith;
这生成了一个映射 table:
------------------------------------
|offeravailablity_offeravailability|
------------------------------------
|offeravailability_source |
|offeravailability_target |
------------------------------------