symfony 如何从Doctrine Array集合中获取单个列?

w8rqjzmb  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(114)

我有一个叫“专业领域”的实体

use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Metadata\ApiFilter;
use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping\InverseJoinColumn;
use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
use App\Repository\AreasProfesionalesRepository;
use Doctrine\Common\Collections\ArrayCollection;
use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

#[ORM\Entity(repositoryClass: AreasProfesionalesRepository::class)]
#[UniqueEntity(fields: ['Codigo'], message: 'Ya existe un area profesional registrada con ese mismo código')]
#[ApiFilter(SearchFilter::class, properties: ['Denominacion' => 'partial', 'Codigo' => 'partial', 'familiasProfesionales'=> 'exact'])]
#[ApiFilter(OrderFilter::class, properties: ['id'], arguments: ['orderParameterName' => 'order'])]
#[ApiResource(paginationEnabled: false,formats: ['json' => ['application/json']],
normalizationContext: ['groups' => ['read']],
denormalizationContext: ['groups' => ['write']])]

class AreasProfesionales
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    #[Groups(['read','write'])]
    #[ApiProperty(writable:true)]
    private ?int $id = null;

    #[ORM\Column(length: 255)]
    #[Groups(['read','write'])]
    private ?string $Denominacion = null;

    #[ORM\Column(length: 20, unique:true)]
    #[Groups(['read', 'write'])]
    private ?string $Codigo = null;

    #[ORM\ManyToOne(inversedBy: 'Familiasprofesionales_areasprofesionales')]
    #[Groups(['read','write'])]
    #[InverseJoinColumn(name: "familias_profesionales_id", referencedColumnName: "id")]
    #[ApiProperty(readableLink: true, writableLink: true)]
    private ?FamiliasProfesionales $familiasProfesionales = null;

    #[ORM\OneToMany(mappedBy: 'areasProfesionales', targetEntity: CertificadosProfesionalidad::class)]
    private Collection $Areasprofesionales_certificadosprofesionalidad;

    #[ORM\OneToMany(mappedBy: 'areasProfesionales', targetEntity: AreasProfesionalesDocentes::class)]
    private Collection $Areasprofesionales_areasprofesionalesdocentes;

    #[ORM\OneToMany(mappedBy: 'areasProfesionales', targetEntity: AreasProfesionalesItinerariosFormativos::class)]
    private Collection $Areasprofesionales_areasprofesionalesitinerariosformativos;

    public function __construct()
    {
        $this->Areasprofesionales_certificadosprofesionalidad = new ArrayCollection();
        $this->Areasprofesionales_areasprofesionalesdocentes = new ArrayCollection();
        $this->Areasprofesionales_areasprofesionalesitinerariosformativos = new ArrayCollection();
    }

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getDenominacion(): ?string
    {
        return $this->Denominacion;
    }

    public function setDenominacion(string $Denominacion): self
    {
        $this->Denominacion = $Denominacion;

        return $this;
    }

    public function getCodigo(): ?string
    {
        return $this->Codigo;
    }

    public function setCodigo(string $Codigo): self
    {
        $this->Codigo = $Codigo;

        return $this;
    }

    public function getFamiliasProfesionales(): ?FamiliasProfesionales
    {
        return $this->familiasProfesionales;
    }

    public function setFamiliasProfesionales(?FamiliasProfesionales $familiasProfesionales): self
    {
        $this->familiasProfesionales = $familiasProfesionales;

        return $this;
    }
    
    /**
     * @return Collection<int, CertificadosProfesionalidad>
     */
    /*public function getAreasprofesionalesCertificadosprofesionalidad(): Collection
    {
        return $this->Areasprofesionales_certificadosprofesionalidad;
    }

    public function addAreasprofesionalesCertificadosprofesionalidad(CertificadosProfesionalidad $areasprofesionalesCertificadosprofesionalidad): self
    {
        if (!$this->Areasprofesionales_certificadosprofesionalidad->contains($areasprofesionalesCertificadosprofesionalidad)) {
            $this->Areasprofesionales_certificadosprofesionalidad->add($areasprofesionalesCertificadosprofesionalidad);
            $areasprofesionalesCertificadosprofesionalidad->setAreasProfesionales($this);
        }

        return $this;
    }

    public function removeAreasprofesionalesCertificadosprofesionalidad(CertificadosProfesionalidad $areasprofesionalesCertificadosprofesionalidad): self
    {
        if ($this->Areasprofesionales_certificadosprofesionalidad->removeElement($areasprofesionalesCertificadosprofesionalidad)) {
            // set the owning side to null (unless already changed)
            if ($areasprofesionalesCertificadosprofesionalidad->getAreasProfesionales() === $this) {
                $areasprofesionalesCertificadosprofesionalidad->setAreasProfesionales(null);
            }
        }

        return $this;
    }*/
    
    /**
     * @return Collection<int, AreasProfesionalesDocentes>
     */
    /public function getAreasprofesionalesAreasprofesionalesdocentes(): Collection
    {
        return $this->Areasprofesionales_areasprofesionalesdocentes;
    }

    public function addAreasprofesionalesAreasprofesionalesdocente(AreasProfesionalesDocentes $areasprofesionalesAreasprofesionalesdocente): self
    {
        if (!$this->Areasprofesionales_areasprofesionalesdocentes->contains($areasprofesionalesAreasprofesionalesdocente)) {
            $this->Areasprofesionales_areasprofesionalesdocentes->add($areasprofesionalesAreasprofesionalesdocente);
            $areasprofesionalesAreasprofesionalesdocente->setAreasProfesionales($this);
        }

        return $this;
    }

    public function removeAreasprofesionalesAreasprofesionalesdocente(AreasProfesionalesDocentes $areasprofesionalesAreasprofesionalesdocente): self
    {
        if ($this->Areasprofesionales_areasprofesionalesdocentes->removeElement($areasprofesionalesAreasprofesionalesdocente)) {
            // set the owning side to null (unless already changed)
            if ($areasprofesionalesAreasprofesionalesdocente->getAreasProfesionales() === $this) {
                $areasprofesionalesAreasprofesionalesdocente->setAreasProfesionales(null);
            }
        }

        return $this;
    }*/

    /**
     * @return Collection<int, AreasProfesionalesItinerariosFormativos>
     */
   public function getAreasprofesionalesAreasprofesionalesitinerariosformativos(): Collection
   {
        return $this->Areasprofesionales_areasprofesionalesitinerariosformativos;
    }

    public function addAreasprofesionalesAreasprofesionalesitinerariosformativo(AreasProfesionalesItinerariosFormativos $areasprofesionalesAreasprofesionalesitinerariosformativo): self
    {
        if (!$this->Areasprofesionales_areasprofesionalesitinerariosformativos->contains($areasprofesionalesAreasprofesionalesitinerariosformativo)) {
            $this->Areasprofesionales_areasprofesionalesitinerariosformativos->add($areasprofesionalesAreasprofesionalesitinerariosformativo);
            $areasprofesionalesAreasprofesionalesitinerariosformativo->setAreasProfesionales($this);
        }

        return $this;
    }

    public function removeAreasprofesionalesAreasprofesionalesitinerariosformativo(AreasProfesionalesItinerariosFormativos $areasprofesionalesAreasprofesionalesitinerariosformativo): self
    {
        if ($this->Areasprofesionales_areasprofesionalesitinerariosformativos->removeElement($areasprofesionalesAreasprofesionalesitinerariosformativo)) {
            // set the owning side to null (unless already changed)
            if ($areasprofesionalesAreasprofesionalesitinerariosformativo->getAreasProfesionales() === $this) {
                $areasprofesionalesAreasprofesionalesitinerariosformativo->setAreasProfesionales(null);
            }
        }

        return $this;
    }
    
    public function __toString()
    {
        return $this->id;
    }

我有另一个实体叫“家庭专业”

use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Metadata\ApiFilter;
use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource;
use Doctrine\Common\Collections\Collection;
use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
use Doctrine\Common\Collections\ArrayCollection;
use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
use App\Repository\FamiliasProfesionalesRepository;
use Symfony\Component\Serializer\Annotation\Groups;

#[ORM\Entity(repositoryClass: FamiliasProfesionalesRepository::class)]
#[ApiFilter(SearchFilter::class, properties: ['Denominacion' => 'partial'])]
#[ApiFilter(OrderFilter::class, properties: ['id', 'Denominacion'], arguments: ['orderParameterName' => 'order'])]
#[ApiResource(paginationEnabled: false,formats: ['json' => ['application/json']],
normalizationContext: ['groups' => ['read']],
denormalizationContext: ['groups' => ['write']])]
class FamiliasProfesionales
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    #[Groups(['read','write'])]
    #[ApiProperty(writable:true)]
    private ?int $id = null;

    #[ORM\Column(length: 255)]
    #[Groups(['read','write'])]
    private ?string $Denominacion = null;

    #[ORM\OneToMany(mappedBy: 'familiasProfesionales', targetEntity: AreasProfesionales::class)]
    #[ORM\JoinColumn()]
    private Collection $Familiasprofesionales_areasprofesionales;

    public function __construct()
    {
        $this->Familiasprofesionales_areasprofesionales = new ArrayCollection();
    }

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getDenominacion(): ?string
    {
        return $this->Denominacion;
    }

    public function setDenominacion(string $Denominacion): self
    {
        $this->Denominacion = $Denominacion;

        return $this;
    }

    /**
     * @return Collection<int, AreasProfesionales>
     */
    public function getFamiliasprofesionalesAreasprofesionales(): Collection
    {
        return $this->Familiasprofesionales_areasprofesionales;
    }

    public function addFamiliasprofesionalesAreasprofesionale(AreasProfesionales $familiasprofesionalesAreasprofesionale): self
    {
        if (!$this->Familiasprofesionales_areasprofesionales->contains($familiasprofesionalesAreasprofesionale)) {
            $this->Familiasprofesionales_areasprofesionales->add($familiasprofesionalesAreasprofesionale);
            $familiasprofesionalesAreasprofesionale->setFamiliasProfesionales($this);
        }

        return $this;
    }

    public function removeFamiliasprofesionalesAreasprofesionale(AreasProfesionales $familiasprofesionalesAreasprofesionale): self
    {
        if ($this->Familiasprofesionales_areasprofesionales->removeElement($familiasprofesionalesAreasprofesionale)) {
            // set the owning side to null (unless already changed)
            if ($familiasprofesionalesAreasprofesionale->getFamiliasProfesionales() === $this) {
                $familiasprofesionalesAreasprofesionale->setFamiliasProfesionales(null);
            }
        }

        return $this;
    }

    public function __toString()
    {
        return $this->id;
    }
    
}

我在我的项目中使用API平台来显示所有的操作和服务。

有没有办法从集合中只获取一个字段?我希望实体“AreasProfesionales”只出现,例如,来自“FamiliasProfesionales”的id。如果我需要在POST方法中创建一个新的专业领域,我只需要输入它所属的专业系列的id,而不必输入所有其他数据,但是,它会返回它的所有字段。提前感谢您。
我一直在尝试使用API平台的读写方法,但我没有得到我想要的结果,我认为问题是Api平台与IRI一起工作,而不是与id一起工作(但我需要与此一起工作)。

dsekswqp

dsekswqp1#

是的,您可以:

<?php
// api/src/Entity/Book.php
namespace App\Entity;

use ApiPlatform\Metadata\ApiResource;
use Symfony\Component\Serializer\Annotation\Groups;

#[ApiResource(normalizationContext: ['groups' => ['book']])]
class Book
{
    #[Groups('book')]
    public $name;

    #[Groups('book')]
    public $author;

    // ...
}

您可以遵循以下文档:https://api-platform.com/docs/core/serialization/
此致!

相关问题