gpt4 book ai didi

symfony - 通过不是主键的 referencedColumnName 连接列 - id

转载 作者:行者123 更新时间:2023-12-02 03:10:04 27 4
gpt4 key购买 nike

我是 Symfony Doctrine 的新手,需要一些有关 Join 实体的帮助。

通常列是按主键 ID 连接的

    /**
* User
*
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="MainBundle\Repository\UserRepository")
* UniqueEntity("email", message="Account with email already exists.")
*/
class User implements AdvancedUserInterface, \Serializable
{
/**
* @var \MainBundle\Entity\PersonDetails
*
* @ORM\ManyToOne(targetEntity="MainBundle\Entity\Person")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="person_details_id", referencedColumnName="id", nullable=true)
* })
*/
private $personDetails = null;

还行吧。

但问题是我想通过用户实体中的 id 字段加入 Relation OneToOne 中的两列


/**
* User
*
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="MainBundle\Repository\UserRepository")
* UniqueEntity("email", message="Account with email already exists.")
*/
class User implements AdvancedUserInterface, \Serializable
{
/**
* @var \MainBundle\Entity\PersonDetails
*
* @ORM\ManyToOne(targetEntity="MainBundle\Entity\Person")
* @ORM\JoinColumn(name="id", referencedColumnName="user_id", nullable=true)
* })
*/
private $personDetails = null;

当我尝试以这种方式连接列时,出现错误

Missing value for primary key id on MainBundle\Entity\PersonDetails



是否可以索引除 id 以外的其他字段,或者我尝试做的事情是不可能的?

谢谢你们。

最佳答案

您混淆了 @JoinColumn 中应引用的列名和字段名。宣言。

@JoinColumn(name="id", referencedColumnName="user_id")

这样 Doctrine 会查找名为 user_id 的字段/属性。在您的 User实体。我猜您希望将连接表中的列命名为 user_id并且条目是 idUser实体。

用户详细信息
/**
* @ORM\Entity
*/
class UserDetail
{
/**
* @ORM\ManyToOne(
* targetEntity="User",
* inversedBy="details"
* )
* @ORM\JoinColumn(
* name="user_id",
* referencedColumnName="id"
* )
*/
protected $user;

public function setUser(User $user)
{
$this->user = $user;

return $this;
}

/** @ORM\Column() */
protected $key;

/** @ORM\Column() */
protected $value;

public function __construct($key, $value)
{
$this->key = $key;
$this->value = $value;
}

用户
class User
{
/**
* @ORM\Id()
* @ORM\Column(type="integer")
*/
protected $id;

/**
* @ORM\OneToMany(
* targetEntity="UserDetail",
* mappedBy="user",
* cascade={
* "persist",
* "remove",
* "merge"
* },
* orphanRemoval=true
* )
*/
protected $details;

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

public function addDetail(UserDetail $detail)
{
$detail->setUser($this);
$this->details->add($detail);

return $this;
}

现在,如果您在 User 中添加详细信息像这样,然后坚持/刷新:
$user->addDetail(new UserDetail('Height', '173cm'));

这将导致 user_detail 中的连接列看起来像这样的表:
| key           | value     | user_id |
|---------------|-----------|---------|
| Height | 173cm | 1 |

关于symfony - 通过不是主键的 referencedColumnName 连接列 - id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40437444/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com