Symfony / php: избегать запроса на предоставление вложенных json объектов из отношения один ко многим - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть лица; Command, User, GiftCheck и GiftCheckType:

GiftCheck

    <?php

    namespace App\Entity;

    use Doctrine\ORM\Mapping as ORM;

    /**
     * @ORM\Entity(repositoryClass="App\Repository\GiftCheckRepository")
     */
    class GiftCheck
    {
        /**
         * @ORM\Id()
         * @ORM\Column(type="integer", length=255)
         *@ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;

        /**
         * @ORM\Column(type="string", length=255, columnDefinition="ENUM('Cadeau', 'Anniversaire', ' Nôel', 'Saint Valentain ')")
         */
        private $theme;

        /**
        * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="giftChecks")
         */
       private $User;

       /**
        * @ORM\Column(type="string", length=255)
        */
       private $uniqueSerialId;

       /**
        * @ORM\ManyToOne(targetEntity="App\Entity\Command", inversedBy="giftChecks")
        * @ORM\JoinColumn(nullable=false)
        */
       private $command;
  /**
     * @ORM\ManyToOne(targetEntity="App\Entity\GiftCheckType", inversedBy="gift")
     */
    private $giftCheckType;

Пользователь

<?php
namespace App\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\UserInterface;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 * @UniqueEntity("email")
 * @UniqueEntity("username")
 * @UniqueEntity("tel")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     *@ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $firstname;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Command", mappedBy="user")
     */
    private $commands;
     /**
    * @ORM\OneToMany(targetEntity="App\Entity\GiftCheck", mappedBy="User")
    */
    private $giftChecks;

Команда

<?php

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\CommandRepository")
 */
class Command
{
    /**
     * @ORM\Id()
     * @ORM\Column(type="string", length=255)
     */
    private $id;

    /**
     * @ORM\Column(type="float")
     */
    private $price;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="commands")
     * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
     */
    private $user;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\CommandLine", mappedBy="command")
     */
    private $commandLines;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $status;



    /**
     * @ORM\OneToMany(targetEntity="App\Entity\GiftCheck", mappedBy="command")
     */
    private $giftChecks;

GiftCheckType

<?php

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\GiftCheckTypeRepository")
 */
class GiftCheckType
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $designation;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\GiftCheck", mappedBy="giftCheckType")
     */
    private $gift;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $type;

Я обнаружил, что столкнулся с проблемой, когда я пытаюсь получить данные моей команды, я получил вложенное json объект (как дочерние / родительские / дочерние структуры одного и того же объекта), которые содержат массив giftchecks, каждый giftcheck содержит пользовательский объект, который имеет тот же список giftchecks, два изображения ниже описывают статус этого вложенного JSON в браузере Журнал консоли при получении результата с angular:

enter image description here enter image description here

- это та проблема, связанная с отсутствием сериализации на моем сущности или идущие с другой стороны? мои отношения сущностей правильно закодированы?

1 Ответ

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

измените сущность пользователя на

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Command", mappedBy="user", fetch="LAZY")
     */
    private $commands;
     /**
    * @ORM\OneToMany(targetEntity="App\Entity\GiftCheck", mappedBy="User", fetch="LAZY")
    */
    private $giftChecks;

. Вы также можете изменить другие сущности, если вы будете sh

https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/annotations-reference.html#onetomany

также смотрите EXTRA_LAZY для производительности https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/tutorials/extra-lazy-associations.html#extra -лази-ассоциации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...