Symfony 2.0 Модель отношений - PullRequest
0 голосов
/ 10 ноября 2011

Я пытаюсь смоделировать следующую структуру таблицы в Symfony 2.0, используя аннотации.

   State
PK Code
   Name

   County
PK State_Code -> FK State.Code
PK Code
   Name

   Muni
PK State_Code -> FK.State.Code
PK County_Code -> FK County.Code
PK Code
   Name

Моделирование полей и отношений между штатами и территориями достаточно простое, но я не могу определить, как определить отношения для таблицы Муни.

  • В штатах есть один или несколько округов.
  • В округах есть один или несколько муниципалитетов.
  • Муни принадлежат к одному или нескольким округам.

Структура таблицы является устаревшей и не может быть изменена.

1 Ответ

2 голосов
/ 10 ноября 2011

Вот, пожалуйста.Протестировано с Symfony 2.0.5 (Doctrine 2.1):

State.php

namespace Acme\WhateverBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * State
 *
 * @ORM\Entity
 */
class State
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue(strategy="NONE")
     * @ORM\Column(name="Code", type="integer")
     */
    private $code;

    /**
     * @ORM\Column(name="Name", type="string")
     */
    private $name;

    /**
     * @ORM\OneToMany(targetEntity="County", mappedBy="state_code")
     */
    private $counties;

    /**
     * @ORM\OneToMany(targetEntity="Muni", mappedBy="state_code")
     */
    private $munis;
}

County.php

namespace Acme\WhateverBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * County
 *
 * @ORM\Entity()
 */
class County
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     * @ORM\Column(name="Code", type="integer")
     */
    private $code;

    /**
     * @ORM\Column(name="Name", type="string")
     */
    private $name;

    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     * @ORM\ManyToOne(targetEntity="State", inversedBy="counties")
     * @ORM\JoinColumn(name="State_Code", referencedColumnName="Code")
     */
    private $state_code;

    /**
     * @ORM\OneToMany(targetEntity="Muni", mappedBy="county_code")
     */
    private $munis;
}

Muni.php

namespace Acme\WhateverBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Muni
 *
 * @ORM\Entity
 */
class Muni
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     * @ORM\Column(name="Code", type="integer")
     */
    private $code;

    /**
     * @ORM\Column(name="Name", type="string")
     */
    private $name;

    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     * @ORM\ManyToOne(targetEntity="County", inversedBy="munis")
     * @ORM\JoinColumn(name="County_Code", referencedColumnName="Code")
     */
    private $county_code;

    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     * @ORM\ManyToOne(targetEntity="State", inversedBy="munis")
     * @ORM\JoinColumn(name="State_Code", referencedColumnName="Code")
     */
    private $state_code;
}

Не забудьте создать методы получения / установки.Все отношения двунаправлены.

...