#symfony #api-platform.com
#symfony #api-platform.com
Вопрос:
С помощью платформы Api мы можем делать заказы по ассоциации.
use ApiPlatformCoreAnnotationApiResource;
/**
* @ApiResource(attributes={"order"={"author.username"}})
*/
class Book
{
...
Но я хочу сделать заказ в каскаде объектов.
В приведенном ниже примере я проверил это с помощью этой ошибки :
* @ApiResource(
* attributes={
* "order"={"exercises.repetitions.id":"asc"}
* }
* )
[Семантическая ошибка] строка 0, col 422 рядом с ‘id ASC, rests_a6.id ‘: Ошибка: класс AppEntityTrainingSerieExercise не имеет имени поля или ассоциации repetitions.id
TrainingSerie
объект :
* @ApiResource(
...
* attributes={
* "order"={"exercises.repetitions.id":"asc"}
* }
* )
*/
class TrainingSerie
{
...
/**
* @var TrainingSerieExercise[]|ArrayCollection
*
* @ORMOneToMany(
* targetEntity="AppEntityTrainingSerieExercise",
* mappedBy="serie",
* cascade={"persist"}
* )
* @Groups({
* "trainings_read",
* "training_series_read",
* "training_series_write",
* })
*/
private $exercises;
...
TrainingSerieExercise
объект :
...
class TrainingSerieExercise
{
...
/**
* @var TrainingSerieRepetition[]|ArrayCollection
*
* @ORMOneToMany(
* targetEntity="AppEntityTrainingSerieExerciseRepetition",
* mappedBy="exercise",
* cascade={"persist"},
* )
* @Groups({
* "training_series_read",
* "training_series_write",
* "training_serie_exercices_write",
* })
*/
private $repetitions;
...
TrainingSerieExerciseRepetition
объект :
class TrainingSerieExerciseRepetition
{
...
/**
* @var integer
*
* @ORMId
* @ORMColumn(name="id", type="integer")
* @ORMGeneratedValue(strategy="AUTO")
* @Groups({
* "training_series_read",
* })
*/
private $id;
...
Комментарии:
1. Это не имеет большого смысла.
$repetitions
это коллекция, у нее не может быть индивидуального идентификатора. Совершенно непонятно, чего именно вы хотите достичь.2. Спасибо за ваш ответ 🙂 Да,
repetitions
это коллекция (TrainingSerieExerciseRepetition[]
), и каждый элемент этой коллекции содержит два поля (id
иrepetition
). Я хочу, чтобы родительская сущность (TrainingSerie
) упорядочила эту коллекцию поid
(но это могло быть и поrepetition
).
Ответ №1:
Следуя этому документу Doctrine, это упорядочит TrainingSerieExercise::$repetitions по идентификатору:
class TrainingSerieExercise
{
...
/**
* @var TrainingSerieRepetition[]|ArrayCollection
*
* @ORMOneToMany(
* targetEntity="AppEntityTrainingSerieExerciseRepetition",
* mappedBy="exercise",
* cascade={"persist"},
* )
* @ORMOrderBy({"id" = "ASC"})
* @Groups({
* "training_series_read",
* "training_series_write",
* "training_serie_exercices_write",
* })
*/
private $repetitions;
...