nielsv
nielsv

Reputation: 6810

Mapping one-to-one relationship + Symfony2

I have a database with a table users with fields: user_id, username, password, ... . I also have a table players with player_name, player_position, ... AND a FK user_id. Image relationship: enter image description here

I genered the entities from the database but now I would like to get the player from user like this $user->getPlayer(). And doctrine didn't generate player in Users entity, only user in Players Entity.

This is what I have now:

    /**
 * @var \VolleyScout\VolleyScoutBundle\Entity\Players
 *
 * @ORM\OneToOne(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Players")
 * @JoinColumn(name="user_id", referencedColumnName="userId")
 */
private $player;

/**
 * Get player
 *
 * @return \VolleyScout\VolleyScoutBundle\Entity\Players
 */

public function getPlayer() {
    return $this->player;
}
/**
 * Set player
 *
 * @param \VolleyScout\VolleyScoutBundle\Entity\Players $player
 * @return Users
 */
public function setPlayer(\VolleyScout\VolleyScoutBundle\Entity\Players $player = null){
    $this->player = $player;

    return $this;
}

But when I try $user->getPlayer() I always get null. (And the user_id is in players table)

UPDATE:
My Players Entity:

<?php

namespace VolleyScout\VolleyScoutBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Players
 *
 * @ORM\Table(name="players", indexes={@ORM\Index(name="fk_players_users1_idx", columns={"user_id"}), @ORM\Index(name="fk_players_teams1_idx", columns={"team_id"}), @ORM\Index(name="fk_players_myteam1_idx", columns={"myteam_id"})})
 * @ORM\Entity
 */
class Players
{
    /**
     * @var string
     *
     * @ORM\Column(name="player_name", type="string", length=255, nullable=false)
     */
    private $playerName;

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

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

    /**
     * @var integer
     *
     * @ORM\Column(name="player_birthyear", type="integer", nullable=true)
     */
    private $playerBirthyear;

    /**
     * @var integer
     *
     * @ORM\Column(name="player_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $playerId;

    /**
     * @var \VolleyScout\VolleyScoutBundle\Entity\Myteam
     *
     * @ORM\ManyToOne(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Myteam")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="myteam_id", referencedColumnName="myteam_id")
     * })
     */
    private $myteam;

    /**
     * @var \VolleyScout\VolleyScoutBundle\Entity\Teams
     *
     * @ORM\ManyToOne(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Teams")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="team_id", referencedColumnName="team_id")
     * })
     */
    private $team;

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



    /**
     * Set playerName
     *
     * @param string $playerName
     * @return Players
     */
    public function setPlayerName($playerName)
    {
        $this->playerName = $playerName;

        return $this;
    }

    /**
     * Get playerName
     *
     * @return string 
     */
    public function getPlayerName()
    {
        return $this->playerName;
    }

    /**
     * Set playerLicensenumber
     *
     * @param string $playerLicensenumber
     * @return Players
     */
    public function setPlayerLicensenumber($playerLicensenumber)
    {
        $this->playerLicensenumber = $playerLicensenumber;

        return $this;
    }

    /**
     * Get playerLicensenumber
     *
     * @return string 
     */
    public function getPlayerLicensenumber()
    {
        return $this->playerLicensenumber;
    }

    /**
     * Set playerPosition
     *
     * @param string $playerPosition
     * @return Players
     */
    public function setPlayerPosition($playerPosition)
    {
        $this->playerPosition = $playerPosition;

        return $this;
    }

    /**
     * Get playerPosition
     *
     * @return string 
     */
    public function getPlayerPosition()
    {
        return $this->playerPosition;
    }

    /**
     * Set playerBirthyear
     *
     * @param integer $playerBirthyear
     * @return Players
     */
    public function setPlayerBirthyear($playerBirthyear)
    {
        $this->playerBirthyear = $playerBirthyear;

        return $this;
    }

    /**
     * Get playerBirthyear
     *
     * @return integer 
     */
    public function getPlayerBirthyear()
    {
        return $this->playerBirthyear;
    }

    /**
     * Get playerId
     *
     * @return integer 
     */
    public function getPlayerId()
    {
        return $this->playerId;
    }

    /**
     * Set myteam
     *
     * @param \VolleyScout\VolleyScoutBundle\Entity\Myteam $myteam
     * @return Players
     */
    public function setMyteam(\VolleyScout\VolleyScoutBundle\Entity\Myteam $myteam = null)
    {
        $this->myteam = $myteam;

        return $this;
    }

    /**
     * Get myteam
     *
     * @return \VolleyScout\VolleyScoutBundle\Entity\Myteam 
     */
    public function getMyteam()
    {
        return $this->myteam;
    }

    /**
     * Set team
     *
     * @param \VolleyScout\VolleyScoutBundle\Entity\Teams $team
     * @return Players
     */
    public function setTeam(\VolleyScout\VolleyScoutBundle\Entity\Teams $team = null)
    {
        $this->team = $team;

        return $this;
    }

    /**
     * Get team
     *
     * @return \VolleyScout\VolleyScoutBundle\Entity\Teams 
     */
    public function getTeam()
    {
        return $this->team;
    }

    /**
     * Set user
     *
     * @param \VolleyScout\VolleyScoutBundle\Entity\Users $user
     * @return Players
     */
    public function setUser(\VolleyScout\VolleyScoutBundle\Entity\Users $user = null)
    {
        $this->user = $user;

        return $this;
    }

    /**
     * Get user
     *
     * @return \VolleyScout\VolleyScoutBundle\Entity\Users 
     */
    public function getUser()
    {
        return $this->user;
    }
}

UPDATE 2: In my Users Entity Class I have now:

 /**
 * @var \VolleyScout\VolleyScoutBundle\Entity\Players
 *
 * @ORM\OneToMany(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Players")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="user_id", referencedColumnName="user_id")
 * })
 */
private $player;

But it still doesn't work ..

Upvotes: 1

Views: 83

Answers (1)

Sehael
Sehael

Reputation: 3736

Your annotations are not set correctly (specifically, the JoinColumn). It is interesting that you aren't getting an error, but anyways... replace this:

/**
 * @var \VolleyScout\VolleyScoutBundle\Entity\Players
 *
 * @ORM\OneToOne(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Players")
 * @JoinColumn(name="user_id", referencedColumnName="userId")
 */
private $player;

with this:

/**
 * @var \VolleyScout\VolleyScoutBundle\Entity\Players
 *
 * @ORM\OneToOne(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Players")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="user_id")
 */
private $player;

notice that your referencedColumnName should be the name as it is shown in the database, not the Doxtrine entity. Start by fixing those errors, and it should solve the problem.

UPDATE

This is a very different setup it you want a manyToOne relationship.

/**
 * @var \VolleyScout\VolleyScoutBundle\Entity\Players
 *
 * @ORM\OneToMany(targetEntity="Players", mappedBy="user_id")
 */
private $players;

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

Because $players can now have many values, it should be set as an ArrayCollection. I also made the variable $players instead of $player, for ease of readability.

You should really familiarize yourself with the Symfony Docs, this is a very simple problem that is described very clear in the Symfony docs

Upvotes: 1

Related Questions