简体   繁体   English

一对一关系映射+ Symfony2

[英]Mapping one-to-one relationship + Symfony2

I have a database with a table users with fields: user_id, username, password , ... . 我有一个数据库,其中的表users具有以下字段: user_id, username, password ,...。 I also have a table players with player_name, player_position , ... AND a FK user_id . 我也有一个具有player_name, player_position ,...和FK user_id的牌桌players Image relationship: 图片关系: 在此处输入图片说明

I genered the entities from the database but now I would like to get the player from user like this $user->getPlayer(). 我从数据库中生成了实体,但现在我想从像$ 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. 但是当我尝试$ user-> getPlayer()时,我总是得到null。 (And the user_id is in players table) (并且user_id在玩家表中)

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: 更新2 :在我的用户实体类中,我现在有:

 /**
 * @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 .. 但这仍然行不通..

Your annotations are not set correctly (specifically, the JoinColumn). 您的注释设置不正确(特别是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. 请注意,您的referencedColumnName应该是数据库中显示的名称,而不是Doxtrine实体。 Start by fixing those errors, and it should solve the problem. 首先修复这些错误,它应该可以解决问题。

UPDATE UPDATE

This is a very different setup it you want a manyToOne relationship. 您需要manyToOne关系,这是一个非常不同的设置。

/**
 * @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 . 由于$players现在可以具有许多值,因此应将其设置为ArrayCollection I also made the variable $players instead of $player , for ease of readability. 为了便于阅读,我还使变量$players代替了$player

You should really familiarize yourself with the Symfony Docs, this is a very simple problem that is described very clear in the Symfony docs 你真的应该熟悉Symfony的文档,这是在描述非常清楚一个很简单的问题, Symfony的文档

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM