Я начал делать небольшой проект на платформе API, чтобы проверить, как он работает.
К сожалению, в самом начале я столкнулся с проблемой, что я не могу установить связь @ApiSubresource
ManyToOne
, потому что это вызывает ошибку
«[Семантическая ошибка], строка 0, столбец 129 рядом с 'users =: cur': Ошибка: недопустимое выражение пути. Ожидается выражение StateFieldPathExpression или SingleValuedAssociationField.»
Мои классы выглядят так:
/**
* @ApiResource(
* collectionOperations={"post"},
* itemOperations={
* "get"={ "security"="is_granted('VIEW_AS_OWNER_USER', object)", }
* },
* normalizationContext={"groups"={"operation:read"}},
* denormalizationContext={"groups"={"operation:write"}}
* )
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @ORM\Table(name="`user`")
*/
class User implements UserInterface
{
/* rest of the entity declaration omitted */
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Band", inversedBy="users")
* @ApiSubresource()
*/
private $band;
}
/**
* @ApiResource()
* @ORM\Entity(repositoryClass="App\Repository\BandRepository")
* @ORM\Table(name="band")
*/
class Band
{
/* rest of the entity declaration omitted */
/**
* @ORM\OneToMany(targetEntity="App\Entity\User", mappedBy="band")
*/
private $users;
}
Покопавшись в Symfony Parser, похоже, что он пытается выполнить этот SQL:
ВЫБРАТЬ o FROM App \ Entity \ Band o ГДЕ o IN (ВЫБРАТЬ ИДЕНТИФИКАТОР (id_a1.band) FROM App \ Entity \ User id_a1 ГДЕ id_a1.id =: id_p1) И o.users =: current_user
Я нашел несколько советов, но все они были для Symfony для ручного запроса. Существует некоторое автоматическое построение запросов, по крайней мере, для меня, на самом базовом уровне.
Вы знаете, что я сделал не так? Или это просто сломанный фреймворк?