Reputation: 6810
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:
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
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