Где разместить функцию / метод для проверки результата SQL-запроса - PullRequest
0 голосов
/ 08 марта 2019

Я продолжаю бороться с Symfony в отношении того, куда поместить некоторые логику и функции.

В этом случае у меня есть простой запрос. Я хочу знать, сколько «Профилей» зависит от адреса.
запрос:

SELECT count(*)
FROM beneficiary_profile AS bp
JOIN person AS p ON bp.beneficiary_id = p.id
JOIN contact_address AS ca ON p.contact_address_id = ca.id
WHERE ca.id = 2108 -- address id

плохой способ сделать это [в моем контроллере] с помощью методов сущностей это

$dependant = 0;
foreach ($address->getPeople() as $person) {
    if ($person->getBeneficiaryProfile() !== null) {
        $dependant++;
    }
}

в конечном счете, это служит флагом для печати предупреждения о редактировании зависимой записи адреса.

Моей первой мыслью было добавить к сущности новый метод, $address->isDependent(), который бы возвращал bool на основе ($count > 1), но для этого мне потребовалось бы получить хранилище сущностей от сущности.

Вскоре появится целый набор логики, которая должна быть связана с удалением, а затем удалением (или нет), чтобы предотвратить потерю записей. Логика не так проста, как каскадирование, поскольку между адресом и профилем может быть много людей. в миксе также есть запись о доме.

Должен ли я просто построить свой запрос в хранилище адресов, а затем установить флаг в контроллере? (веточка читает флаг и отображает враждующих или нет)

1 Ответ

0 голосов
/ 08 марта 2019

Хранилище сущностей - это класс, который содержит все ваши запросы к базе данных, связанные с какой-либо сущностью, в вашем случае это address.Итак, yes , вы должны создать новый метод в AddressRepository и использовать его там, где вам нужно.

Не уверен, что вы подразумеваете под повторным использованием кода, вы можете получить репозиторий почти везде в классах Symfony.Итак, вы пишете что-то вроде

$count = $this->getDoctrine()
    ->getRepository(ContactAddress::class)
    ->getDependencyCount($address->getId());

и используете эту переменную $count в своем коде.Как я уже сказал, это просто и понятно.

А в symfony4 вы можете даже внедрить репозиторий в свой контроллер, поэтому код можно сократить до чего-то вроде:

public function __construct(AddressRepository $repo)
{
    $this->repo = $repo;
}

public function someAction()
{
    $count = $this->repo->getDependencyCount($address->getId());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...