Symfony 从代理对象抓取数据

Symfony grabbing data from proxy object

我有以下代码来获取其中包含 1 App\Entity\Player 的数组。我想获取俱乐部的名称 属性。这给了我一个错误: App\Entity\Player::getClub(): Return value must be of type Club, Proxies_CG_\App\Entity\Club 返回。 我如何才能获取俱乐部名称?

        $player_data = array();

        $em = $this->getDoctrine()->getManager();
        $query = $em->createQuery("SELECT p FROM App\Entity\Player p  WHERE p.user = :id");
        $query->setParameter('id', $user_id);
        $player = $query->getResult();
        array_push($player_data, $player[0]->getClub()->getName());

当我转储 $player 对象时,我得到以下信息: 注意 Proxies_CG_\App\Entity\Club

HomeController.php on line 37:
array:1 [▼
  0 => App\Entity\Player {#727 ▼
    -id: 7
    -firstName: "Kevin"
    -lastName: "de Bruyne"
    -weapon: "Passing"
    -position: "Midfield"
    -number: 17
    -benchmarkPlayerId: 1
    -calendar: Proxies\__CG__\App\Entity\Calendar {#387 ▶}
    -club: Proxies\__CG__\App\Entity\Club {#734 ▼
      +__isInitialized__: false
      -id: 2
      -name: null
      -city: null
      -league: null
       …2
    }
    -target: Proxies\__CG__\App\Entity\Target {#743 ▶}
    -user: App\Entity\User {#507 ▶}
  }
]

App\Entity\Player

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Player
 *
 * @ORM\Table(name="player", indexes={@ORM\Index(name="user_id", columns={"user_id"}), @ORM\Index(name="calendar_id", columns={"calendar_id"}), @ORM\Index(name="club_id", columns={"club_id"}), @ORM\Index(name="target_id", columns={"target_id"})})
 * @ORM\Entity
 */
class Player
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="first_name", type="string", length=255, nullable=false)
     */
    private $firstName;

    /**
     * @var string
     *
     * @ORM\Column(name="last_name", type="string", length=255, nullable=false)
     */
    private $lastName;

    /**
     * @var string
     *
     * @ORM\Column(name="weapon", type="string", length=255, nullable=false)
     */
    private $weapon;

    /**
     * @var string
     *
     * @ORM\Column(name="position", type="string", length=50, nullable=false)
     */
    private $position;

    /**
     * @var int
     *
     * @ORM\Column(name="number", type="integer", nullable=false)
     */
    private $number;

    /**
     * @var int
     *
     * @ORM\Column(name="benchmark_player_id", type="integer", nullable=false)
     */
    private $benchmarkPlayerId;

    /**
     * @var \Calendar
     *
     * @ORM\ManyToOne(targetEntity="Calendar")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="calendar_id", referencedColumnName="id")
     * })
     */
    private $calendar;

    /**
     * @var \Club
     *
     * @ORM\ManyToOne(targetEntity="Club")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="club_id", referencedColumnName="id")
     * })
     */
    private $club;

    /**
     * @var \Target
     *
     * @ORM\ManyToOne(targetEntity="Target")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="target_id", referencedColumnName="id")
     * })
     */
    private $target;

    /**
     * @var \User
     *
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     * })
     */
    private $user;

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

    /**
     * @return string
     */
    public function getFirstName(): string
    {
        return $this->firstName;
    }

    /**
     * @param string $firstName
     */
    public function setFirstName(string $firstName): void
    {
        $this->firstName = $firstName;
    }

    /**
     * @return string
     */
    public function getLastName(): string
    {
        return $this->lastName;
    }

    /**
     * @param string $lastName
     */
    public function setLastName(string $lastName): void
    {
        $this->lastName = $lastName;
    }

    /**
     * @return string
     */
    public function getWeapon(): string
    {
        return $this->weapon;
    }

    /**
     * @param string $weapon
     */
    public function setWeapon(string $weapon): void
    {
        $this->weapon = $weapon;
    }

    /**
     * @return string
     */
    public function getPosition(): string
    {
        return $this->position;
    }

    /**
     * @param string $position
     */
    public function setPosition(string $position): void
    {
        $this->position = $position;
    }

    /**
     * @return int
     */
    public function getNumber(): int
    {
        return $this->number;
    }

    /**
     * @param int $number
     */
    public function setNumber(int $number): void
    {
        $this->number = $number;
    }

    /**
     * @return int
     */
    public function getBenchmarkPlayerId(): int
    {
        return $this->benchmarkPlayerId;
    }

    /**
     * @param int $benchmarkPlayerId
     */
    public function setBenchmarkPlayerId(int $benchmarkPlayerId): void
    {
        $this->benchmarkPlayerId = $benchmarkPlayerId;
    }

    /**
     * @return \Calendar
     */
    public function getCalendar(): \Calendar
    {
        return $this->calendar;
    }

    /**
     * @param \Calendar $calendar
     */
    public function setCalendar(\Calendar $calendar): void
    {
        $this->calendar = $calendar;
    }

    /**
     * @return \Club
     */
    public function getClub(): \Club
    {
        return $this->club;
    }

    /**
     * @param \Club $club
     */
    public function setClub(\Club $club): void
    {
        $this->club = $club;
    }

    /**
     * @return \Target
     */
    public function getTarget(): \Target
    {
        return $this->target;
    }

    /**
     * @param \Target $target
     */
    public function setTarget(\Target $target): void
    {
        $this->target = $target;
    }

    /**
     * @return \User
     */
    public function getUser(): \User
    {
        return $this->user;
    }

    /**
     * @param \User $user
     */
    public function setUser(\User $user): void
    {
        $this->user = $user;
    }
}

App\Entity\Club

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Club
 *
 * @ORM\Table(name="club", indexes={@ORM\Index(name="league_id", columns={"league_id"})})
 * @ORM\Entity
 */
class Club
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=50, nullable=false)
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(name="city", type="string", length=50, nullable=false)
     */
    private $city;

    /**
     * @var \League
     *
     * @ORM\ManyToOne(targetEntity="League")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="league_id", referencedColumnName="id")
     * })
     */
    private $league;

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

    /**
     * @param int $id
     */
    public function setId(int $id): void
    {
        $this->id = $id;
    }

    /**
     * @return string
     */
    public function getName(): string
    {
        return $this->name;
    }

    /**
     * @param string $name
     */
    public function setName(string $name): void
    {
        $this->name = $name;
    }

    /**
     * @return string
     */
    public function getCity(): string
    {
        return $this->city;
    }

    /**
     * @param string $city
     */
    public function setCity(string $city): void
    {
        $this->city = $city;
    }
}

Doctrine Proxy 自动扩展您的实体 (App\Entity\Club)。但是在 Player 实体上 getClub() 方法的 return 类型中,您有 \Club (根本没有名称空间)。它与 App\Entity\Club(命名空间 App\Entity)不同。您需要更改此类型(以及文件中的其他类型)以使用正确的命名空间。

要在 return 类型中获取命名空间 App\Entity\Club,您需要使用 \App\Entity\Club(带前导斜线)或 Club(不带前导斜线)