1

doctrine 2 に問題があります。次の db テーブルがあります。したがって、Doctrine はサイトのデスク設定からデータを取得するエンティティを生成しますが、desk_settings テーブルからすべての設定を取得し、desk_id を使用してdesk_settings_values テーブルからその値を上書きする必要があります

DB イメージ -> https://docs.google.com/file/d/0B7rOFTJGfJwTWEQ3bXZFU1hXZlU/edit?usp=sharing

スクリプトで生成された Doctrine エンティティ:

/**
 * デスク
 *
 * @ORM\Table(name="デスク")
 * @ORM\エンティティ
 */
クラスデスク
{
    /**
     * @var 整数
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\ID
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    プライベート $id;

    /**
     * @var 文字列
     *
     * @ORM\Column(name="code", type="string", length=100, nullable=false)
     */
    プライベート $code;

    /**
     * @var 文字列
     *
     * @ORM\Column(name="description", type="string", length=255, nullable=false)
     */
    プライベート $description;

    /**
     * @var\DateTime
     *
     * @ORM\Column(name="created", type="datetime", nullable=false)
     */
    プライベート $created;

    /**
     * @var\Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="PayBox\Entity\DeskSettings", mappingBy="desk")
     */
    プライベート $deskSettings;
}

Doctrine\ORM\Mapping を ORM として使用します。

/**
 * デスク設定
 *
 * @ORM\Table(name="desk_settings")
 * @ORM\エンティティ
 */
クラス DeskSettings
{
    /**
     * @var 整数
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\ID
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    プライベート $id;

    /**
     * @var 文字列
     *
     * @ORM\Column(name="setting_key", type="string", length=100, nullable=false)
     */
    プライベート $settingKey;

    /**
     * @var 文字列
     *
     * @ORM\Column(name="setting_value", type="string", length=255, nullable=false)
     */
    プライベート $settingValue;

    /**
     * @var\DateTime
     *
     * @ORM\Column(name="created", type="datetime", nullable=false)
     */
    プライベート $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")
     *}
     * )
     */
    プライベート $desk;
 }

4

1 に答える 1

1

Doctrine のドキュメントから:

多対多の関連付けがあまり一般的でないのはなぜですか? 追加の属性をアソシエーションに関連付けたいことがよくあるため、その場合はアソシエーション クラスを導入します。その結果、直接的な多対多の関連付けはなくなり、3 つの参加クラス間の 1 対多/多対 1 の関連付けに置き換えられます。

クラス構造を一対多/多対一に変更する必要があります。このブログを参照してください

于 2013-08-04T22:45:06.023 に答える