【问题标题】:Inserting into DB with Doctrine and Symfony - foreign key doesn't insert使用 Doctrine 和 Symfony 插入数据库 - 外键不插入
【发布时间】:2013-11-03 21:58:30
【问题描述】:

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

/**
 * @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 中有正确的数据)。

部分控制器代码:

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();

当我将设置器更改为此时,它已正确插入:

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

怎么了?谢谢

【问题讨论】:

  • 请使用保留实体的代码部分进行更新
  • 我添加了更多代码

标签: php mysql sql symfony doctrine-orm


【解决方案1】:

您需要使用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;
    }
}

在你的控制器中:

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();
        // ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多