Php Symfony从代理对象抓取数据

Php Symfony从代理对象抓取数据,php,symfony,doctrine,Php,Symfony,Doctrine,我有下面的代码来获取一个数组,其中包含一个App\Entity\Player。我想知道俱乐部的名称和财产。这给了我一个错误:App\Entity\Player::getClub():返回值的类型必须是Club,proxy\u CG\uu\App\Entity\Club returned。例如,我如何获取俱乐部名称 $player_data = array(); $em = $this->getDoctrine()->getManager();

我有下面的代码来获取一个数组,其中包含一个App\Entity\Player。我想知道俱乐部的名称和财产。这给了我一个错误:App\Entity\Player::getClub():返回值的类型必须是Club,proxy\u CG\uu\App\Entity\Club returned。例如,我如何获取俱乐部名称

        $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对象时,会得到以下结果: 请注意代理\u CG\uu\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 ▶}
  }
]
<?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;
    }
}

应用\实体\播放器

<?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
)。但是在
Player
实体上的方法
getClub()
的返回类型中,您有
\Club
(完全没有名称空间)。它与
App\Entity\Club
(名称空间
App\Entity
)不同。您需要更改此类型(以及文件中的其他类型)以使用正确的命名空间


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

我认为问题在于您的返回类型
\Club
App\Entity\Club
完全不同。前面的“\”将使PHP在全局名称空间中查找该类,这可能就是类型不匹配的原因。换句话说,
Club
引用当前名称空间中的类,即
App\Entity\Club
,而
\Club
引用全局名称空间中的类。名称空间在文件顶部定义,请参见播放器实体文件中的
名称空间:App\Entity
。当我按照您的建议将其更改为
App\Entity\Club
的返回类型时。我收到以下错误:
App\Entity\Player::getClub():返回值的类型必须为App\Entity\App\Entity\Club,返回的代理\\uuuuu CG\uuuuu\App\Entity\Club。
请尝试将其与前导斜杠一起使用。不带前导斜杠,将当前命名空间用作根。您需要返回
\App\Entity\Club
或只返回
Club
(不带前导斜杠)@user10031659我更新了我的答案以便更清楚谢谢!!这对我有用。由于我是Symfony的新手,我一整天都在思考这个问题。编辑:仅供参考,我使用PHPstorm生成了getter和setter,所以出现了问题。