gpt4 book ai didi

php - 使用 Doctrine 和 Symfony 插入数据库 - 外键不插入

转载 作者:行者123 更新时间:2023-11-29 13:30:09 25 4
gpt4 key购买 nike

我将 Symfony 与 Doctrine 结合使用,并尝试将数据插入数据库。在我的表 messages 中,有一列 user_id 被设置为 users.id 的外键。在我的 Message 实体中,有一个 user_id

的 setter
/**
* @ORM\Entity
* @ORM\Table(name="Messages")
*/
class Message {

/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @ORM\Column(name="user_id", type="integer")
*/
protected $user_id;

/**
* @ORM\Column(name="text", type="text")
*/
protected $text;

/**
* @ORM\ManyToOne(targetEntity="User")
* */
protected $user;

public function setText($text) {
$this->text = $text;
}

public function getText() {
return $this->text;
}

public function setUserId($user_id) {
$this->user_id = $user_id;
}

public function getUser_id() {
return $this->user_id;
}

public function getUser() {
return $this->user;
}
}

但是它不会插入传递给我的 setter 的变量,而是NULL。其他所有列都填充了正确的数据,而仅插入这一列则不然。我想这与外键有关(表 users 中存在正确的数据)。

部分 Controller 代码:

if ($request->getMethod() == 'POST') {
$form->bind($request);
if ($form->isValid()) {
if ($isLogged) {
$user = $this->get('security.context')->getToken()->getUser();
$message->setUserId($user->getId());
}
$em->persist($message);
$em->flush();

当我将 setter 更改为此时,它会正确插入:

    public function setUserId($user_id) {
$this->random_column_which_is_not_foreignkey = $user_id;
}

怎么了?谢谢

最佳答案

您需要使用JoinColumn .

试试这个:

/**
* @ORM\Entity
* @ORM\Table(name="Messages")
*/
class Message {

/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @ORM\Column(name="text", type="text")
*/
protected $text;

/**
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id")
*/
protected $user;

public function setText($text) {
$this->text = $text;
}

public function getText() {
return $this->text;
}

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

public function getUser() {
return $this->user;
}
}

在你的 Controller 中:

if ($request->getMethod() == 'POST') {
$form->bind($request);
if ($form->isValid()) {
if ($isLogged) {
$user = $this->get('security.context')->getToken()->getUser();
$message->setUser($user);
}
$em->persist($message);
$em->flush();
// ...

关于php - 使用 Doctrine 和 Symfony 插入数据库 - 外键不插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19578726/

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