Как автоматически фильтровать встраиваемые данные отношений? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть 2 простые сущности, связанные между собой:

<?php

declare(strict_types=1);

namespace App\Entity;

// use ... ;

/**
 * @ApiResource(
 *     subresourceOperations={
 *         // ...
 *     },
 *     // ... ,
 *     normalizationContext={"groups" = {"category:read"}}
 * )
 * @ ...
 */
class Category
{
    // ...

    /**
     * @ORM\OneToMany(targetEntity="Object", mappedBy="category")
     * @ApiSubresource
     * @Groups({"category:read"})
     */
    private $objects;

    // ...

    public function getObjects(): Collection
    {
        return $this->objects;
    }
}

И

<?php

declare(strict_types=1);

namespace App\Entity;

// use ... ;

/**
 * @ApiResource(
 *     // ...
 * )
 * @ ...
 */
class Object
{
    // ...

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Category")
     * @ORM\JoinColumn(nullable=false)
     * @Groups({"object:read", "object:write"})
     */
    private $category;

    /**
     * @ORM\Column(type="boolean")
     */
    private $isActive = true;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     * @Groups({"object:read", "object:write", "category:read"})
     */
    private $name;

    // ...
}

Я хочу получить /api/сategories/{id} связанных данных Objects, где isActive = true. Теперь я получаю все записи.

Я пытался использовать QueryItemExtensionInterface и QueryCollectionExtensionInterface, но я все еще получаю все записи. fetch ="EAGER" также не помог мне

Я уточняю, я не хочу получать это по подресурсу /api/categories/{id}/objects. Я хочу получить его, используя /api/сategories/{id}

Я также хочу, чтобы это зависело от роли пользователя. Чтобы админ мог получить все записи, а пользователь только isActive = true

Есть идеи как это сделать?

1 Ответ

0 голосов
/ 19 февраля 2020

Используйте Булев фильтр с categories?objects.isActive=1. Этот фильтр должен быть настроен для свойства отношения как , описанное здесь .

...