【问题标题】:Matrix type mapping with Doctrine entities与 Doctrine 实体的矩阵类型映射
【发布时间】:2015-11-25 19:56:44
【问题描述】:

我有一点问题。我正在使用 Doctrine 2 实体对数据库结构进行建模,但我遇到了一个关系。

我需要在数据库中表示的是一个类似表格的矩阵:

| |A|B|C|D|
|A|  x
|B|x   x
|C|  x   x
|D|    x

表格显示的是哪些优惠可与其他优惠一起使用(x=true,empty = false)。 我试图做的是与学说的多对多关系,希望这会生成一个映射表,但学说并没有这样做。 这是我的实体:

/** 
 * @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; 

我知道我可以手动创建映射表实体并使用一对多关系。但我想知道是否有更聪明的方法来解决这个问题。

【问题讨论】:

    标签: php mysql doctrine-orm zend-framework2 relational-database


    【解决方案1】:

    没关系,我找到了问题。在这种情况下创建映射只会混淆 Doctrine。去掉映射和反演完全解决了这个问题:

    /**
     * @var \Doctrine\Common\Collections\Collection
     * @ORM\ManyToMany(targetEntity="Core\Entity\Offers\OfferAvailability", fetch="EXTRA_LAZY")
     */
    protected $availableWith;
    

    这生成了一个映射表:

    ------------------------------------
    |offeravailablity_offeravailability|
    ------------------------------------
    |offeravailability_source          |
    |offeravailability_target          |
    ------------------------------------
    

    【讨论】:

      猜你喜欢
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      相关资源
      最近更新 更多