Доктрина ORM объединяет сущность через множество в одну таблицу - PullRequest
0 голосов
/ 25 марта 2019

У меня есть эти сущности в Symfony 3.4:

class Status {

    /*
     * @var int
     */   
    public $id;

    /*
     * @var string
     */
    public $name;

    /*
     * @var StatusLabel $label
     *
     * @ManyToOne(targetEntity="StatusLabel")
     * @JoinColumn(name="statusLabelId", referencedColumnName="id")
     */
    public $label;

    /*
     * @return StatusLabel
     */
    public function getLabel($activity) // Needs an activity as an argument 
    {
        return $this->label;
    }
}

class Activity {

    /*
     * @var int
     */   
    public $id;

    /*
     * @var string
     */
    public $name;

}

class StatusLabel {

    /*
     * @var int
     */   
    public $id;

    /*
     * @var int
     */
    public $statusId;

    /*
     * @var int
     */
    public $activityId;

    /*
     * @return string
     */
    public $label;

}

Новая сущность, которая позволяет нам устанавливать метку для статуса, уникальную для статуса, называется активностью StatusLabel.Таблицы имеют следующие атрибуты:

Status
--------
| id | name |
StatusLabel
--------
| id | activityId | statusId | label |
Activity
--------
| id | name |

Попытка использовать аннотации для определения объединения, чтобы я мог получить StatusLabel.label, если у меня есть активность, например:

$activity = $this->getDoctrine()->getRepository('Entity\Activity')->findOneBy(['slug' => 'outdoors-activity']);
/** @var StatusLabel $activityStatusLabel */
$activityStatusLabel = $userActivity->getStatus()->getLabel($activity); 
echo $activityStatusLabel->getLabel();

Было бы лучше, чтобы действие передавалось автоматически, но я не могу понять, как это сделать с помощью аннотаций ORM.Я не хочу запрашивать у сущности!

...