Ссылочное значение настройки в сущности Symfony - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть сомнения по поводу организации кода с использованием symfony3 и доктрины: я постараюсь объяснить как можно яснее.Допустим, у меня есть сущность FootballClub:

class FootballClub
{
    // other code
    private $memberships;

    public function addMembership(Membership $membership) : FootballClub
    { 
       $this->memberships[] = $membership;
       return $this;

    }

    public function removeMembership(Membership $membership) : bool
    {
        return $this->memberships->removeElement($membership);
    }
}

Сущность находится в отношениях «многие к одному» с другой сущностью, членством, которая представляет собой контракт, заключенный игроком с клубом.Допустим, у каждого клуба есть только ограниченное количество членства, которое он может приобрести, число, которое представляется как параметр, например, как свойство в объекте «Настройка».Вопрос заключается в следующем: как я должен ссылаться на эту настройку при удалении членства из клуба и проверке, что соблюдается?Субъекты не должны иметь никакой зависимости, так что будет правильным способом реализовать это?Услуга?Можете ли вы привести пример?Спасибо за ваше время.

1 Ответ

0 голосов
/ 08 сентября 2018

Вы можете создать Settings сущность, связанную в OneToOne отношении с FootballCluc сущностью.

Определите подобные настройки и создайте их в конструкторе FootballClub

Настройки объекта

/** @Entity */
class Settings
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="integer")
     */
    private $maxMembership;

    // Other configurable properties ... 

    __constructor($maxMembership = 50) 
    {
        $this->maxMembership = $maxMembership;
    }

    public function getMaxMembership()
    {
        return $this->maxMembership;
    }

    public function setMaxMembership($maxMembership)
    {
        $this->maxMembership = $maxMembership;
    }
}

Футбольный субъект

class FootballClub
{

    /**
     * One FootballClub has One Settings.
     * @OneToOne(targetEntity="Settings")
     * @JoinColumn(name="settings_id", referencedColumnName="id")
     */
    private $settings;

    // other code
    private $memberships;

    __constructor(Settings $settings = null)
    {
        if (null === $settings) {
            $settings = new Settings();
        }
        $this->settings = $settings;
    }

    public function addMembership(Membership $membership) : FootballClub
    { 
       if ($this->settings->getMaxMembership() <= count($this->memberships)) {
           // throw new Exception("Max number of membership reached"); Strict mode
           // return false  // soft mode
       }
       $this->memberships-> = $membership;
       return $this;

    }

    public function removeMembership(Membership $membership) : bool
    {
        return $this->memberships->removeElement($membership);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...