PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Sunday, February 20, 2022

[FIXED] Symfony grabbing data from proxy object

 February 20, 2022     doctrine, php, symfony     No comments   

Issue

I have the following code to grab an array with 1 App\Entity\Player inside of it. I want to get the name property of the club. Which gives me an error: App\Entity\Player::getClub(): Return value must be of type Club, Proxies_CG_\App\Entity\Club returned. How am I able to grab the club name for instance?

        $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());

When I dump the $player object I get the following: Note the 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;
    }
}


Solution

Doctrine Proxy automatically extends your entity (App\Entity\Club). But in the return type of your method getClub() on Player entity you have \Club (without namespace at all). It is not the same as App\Entity\Club (namespace App\Entity). You need to change this type (and others in the file) to use right namespace.

To get namespace App\Entity\Club in return type you need use \App\Entity\Club (with leading slash) or Club (without leading slash)



Answered By - Michael Sivolobov
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing