学说2多对多翻译

时间:2013-08-03 18:55:27

标签: mysql zend-framework symfony orm doctrine-orm

我对学说2有疑问。 我有以下数据库表: 因此,Doctrine生成的实体可以从站点的桌面设置中检索数据,但我需要从desk_settings表中检索所有设置,并使用desk_id从desk_settings_values表覆盖其值

数据库图像 - > https://docs.google.com/file/d/0B7rOFTJGfJwTWEQ3bXZFU1hXZlU/edit?usp=sharing

使用脚本生成的Doctrine实体:

/**
 * Desk
 *
 * @ORM\Table(name="desk")
 * @ORM\Entity
 */
class Desk
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="code", type="string", length=100, nullable=false)
     */
    private $code;

    /**
     * @var string
     *
     * @ORM\Column(name="description", type="string", length=255, nullable=false)
     */
    private $description;

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

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="PayBox\Entity\DeskSettings", mappedBy="desk")
     */
    private $deskSettings;
}


use Doctrine\ORM\Mapping as ORM;

/**
 * DeskSettings
 *
 * @ORM\Table(name="desk_settings")
 * @ORM\Entity
 */
class DeskSettings
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="setting_key", type="string", length=100, nullable=false)
     */
    private $settingKey;

    /**
     * @var string
     *
     * @ORM\Column(name="setting_value", type="string", length=255, nullable=false)
     */
    private $settingValue;

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

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="PayBox\Entity\Desk", inversedBy="deskSettings")
     * @ORM\JoinTable(name="desk_settings_values",
     *   joinColumns={
     *     @ORM\JoinColumn(name="desk_settings_id", referencedColumnName="id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="desk_id", referencedColumnName="id")
     *   }
     * )
     */
    private $desk;
 }

1 个答案:

答案 0 :(得分:1)

来自Doctrine文档:

  

为什么多对多关联不太常见?因为经常你   想要将其他属性与关联相关联,其中   你介绍一个关联类的情况。因此,直接   多对多关联消失并被替换为   3个参与者之间的一对多/多对一关联   类。

您需要将班级结构更改为一对多/多对一。 See this blog