简体   繁体   English

如何在symfony中插入带有ManyToOne关系的user_id?

[英]How do I insert user_id with ManyToOne relationship in symfony?

Really new with symfony, coming from yii. 来自yii的symfony真的很新。

I can't insert user_id into another table with a ManyToOne relationship. 我无法将user_id插入到具有ManyToOne关系的另一个表中。 When I get entity of the table that I want to insert of the id, I used: $en->setUser($user_id); 当我得到要插入id的表的实体时,我使用了: $en->setUser($user_id);

The outcome is: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null 结果是: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null

but when I do var_dump($user_id); 但是当我做var_dump($user_id); there is an id. 有一个身份证。 So how can I insert user_id with a many to one relationship? 那么如何插入user_id与多对一关系?

[update] TableUser Entity [更新] TableUser实体

<?php
namespace User\Bundle\RegisterBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;
/**
 * User
 *
 * @ORM\Table(name="user", indexes={@ORM\Index(name="user_id", columns={"user_id"})})
 * @ORM\Entity
 */

class User
{
    /**
     * @var integer
     *
     * @ORM\Column(name="user_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $userId;

    public function getUserId()
    {
        return $this->userId;
    }
}
?>

TableSomeModel Entity that has ManytoOne relationship with user_id TableSomeModel与user_id具有ManytoOne关系的实体

<?php
namespace \Entity;
use Doctrine\ORM\Mapping as ORM;
/**
 * SomeModel
 *
 * @ORM\Table(name="SomeModel", indexes={@ORM\Index(name="user_id", columns={"user_id"})})
 * @ORM\Entity
 */
class SomeModel
{
    /**
     * @var \User
     *
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="user_id", referencedColumnName="user_id")
     * })
     */
    private $user;

    /**
     * Set user
     *
     * @param \Entity\User $user
     * @return App
     */
    public function setUser(\Entity\User $user)
    {
        return $this->user;
    }

    /**
     * Get user
     *
     * @return \Entity\User 
     */
    public function getUser()
    {
        return $this->user;
    }
}

In the controller 在控制器中

$en = new SomeModel();
var_dump($user_id); //not null
$en->setUser($user_id); //always null;
$en->setUser($User); // $User is object

要么

$en->setUser($em->getReference('User\Bundle\RegisterBundle\Entity\User', $user_id)); // $user_id is integer, $em is EntityManager

Make sure that you have defined the relation properly. 确保您已正确定义了关系。 If you are using yml configuration files for defining entities, many to one relations are configured as given below. 如果您使用yml配置文件来定义实体,则配置多对一关系,如下所示。

manyToOne:
user:
  targetEntity: Your\NameSpace\Entity\User
  joinColumn:
    name: user_id
    referencedColumnName: id

If you are using annotation to define the relation, 如果使用注释来定义关系,

/**
 * @ManyToOne(targetEntity="Your\NameSpace\Entity\User")
 * @JoinColumn(name="user_id", referencedColumnName="id")
 **/
private $user;

And the setUser method in your entity 和实体中的setUser方法

 /**
     * Set user
     *
     * @param Blsk\CoreBundle\Entity\User $user
     */
    public function setUser(Your\NameSpace\Entity\User $user = null)
    {
        $this->user = $user;
    }

EDIT In your code, setUser method is not setting the user but returning the user. 编辑在您的代码中, setUser方法不是设置用户而是返回用户。

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

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