Доброго времени, коллеги!
В наличии: Symfony 3.3, Doctrine 2.5, Neomerx/JsonApi 1.0.
Сейчас: У модели User есть закладки (в них можно добавлять разного типа сущности, включая других юзеров). С помощью Доктрины и интерфейсе IFavouritable они представлены в виде связи "один-ко-многим" таким образом:
trait HasFavorites
{
/**
* @var ArrayCollection
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Favorite", mappedBy="user")
*/
protected $favorites;
public function getFavorites() : Collection { return $this->favorites; }
public function addFavorite(Favorite $favorite) { $this->favorites->add($favorite); }
public function removeFavorite(Favorite $favorite) { $this->favorites->removeElement($favorite); }
}
Теперь, в схеме (=сериализаторе?) перед самой отдачей ответа я имею объект User, который превращаю в массив, а затем в json.
Вопрос: в моделях с интерфейсом нужно отдавать значение "есть ли этот объект в закладках текущего залогиненного пользователя". Как вы бы это решили?
Варианты:
– С помощью DI в схему добавить репозиторий и аутентификатор, делать запросы с проверкой из схемы. Мне не нравится этот вариант тем, что при отдаче 100 объектов будет 100+ запросов в базу для уточнения этого аттрибута.
– Передавать в модель репозиторий и текущего юзера. Проблемы те же что и в примере выше, плюс ещё и модель начинает знать о хранилище.
– ???