完整性约束违例:1048 列 'user_id' 不能为空

7 浏览
0 Comments

完整性约束违例:1048 列 'user_id' 不能为空

当我想要使用setUserId()方法设置user_id时,我不知道为什么会出现这个错误。我在User类和Document类之间建立了ManyToOne关系,所以一个用户可以有多个文档。是因为这个关系导致的吗?

User.php

/**
 * @ORM\OneToMany(targetEntity="Document", mappedBy="users")
 */
private $documents;
/**
 * 添加文档
 *
 * @param \AppBundle\Entity\Document $document
 *
 * @return User
 */
public function addDocument(\AppBundle\Entity\Document $document)
{
    $this->documents[] = $document;
    return $this;
}

Document.php

/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="documents")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $users;
/**
 * 设置用户
 *
 * @param \AppBundle\Entity\User $users
 *
 * @return Document
 */
public function setUsers(\AppBundle\Entity\User $users)
{
    $this->users = $users;
    return $this;
}
/**
 * 设置userId
 *
 * @param integer $userId
 *
 * @return Document
 */
public function setUserId($userId)
{
    $this->user_id = $userId;
    return $this;
}

这是我正在保存的内容:

public function createAction(Request $request)
{
    $content = $request->getContent();
    $json = json_decode($content);
    $id = $this->getUser()->getId();
    $repository = $this->getDoctrine()->getRepository('AppBundle:Document');
    $document = new Document();
    //$user_id = $id;
    $document->setTitle($json->title);
    $document->setUserId($id);
    $em = $this->getDoctrine()->getManager();
    $em->persist($document);
    $em->flush();
    return new JsonResponse($json);
}

我得到了以下错误:

执行'INSERT INTO document (title, document, user_id) VALUES (?, ?, ?)'时出现异常,参数为["oim", null, null]:SQLSTATE[23000]:完整性约束违规:1048列'user_id'不能为空

..所以我的document可以为空,但user_id不能为空。有人可以帮我吗?

0
0 Comments

文章标题: Integrity constraint violation: 1048 Column 'user_id' cannot be null问题的原因和解决方法

在上述代码中,出现了Integrity constraint violation: 1048 Column 'user_id' cannot be null的错误。下面我们来分析一下这个问题出现的原因以及解决方法。

原因:

出现这个错误的原因是在创建一个Document实例时,它的user_id字段不能为空,但是在上述代码中没有给user_id字段赋值,导致出现了这个错误。

解决方法:

要解决这个问题,我们需要做以下几个步骤:

1. 在User实体中添加一个$id属性,用于存储用户的ID。

2. 在创建User实例时,通过$this->getUser()->getId()获取当前用户的ID,并将其赋值给$user的$id属性。

3. 将$user实例设置为$document的关联用户。

4. 最后,将$document实例持久化到数据库中。

下面是修改后的代码示例:

public function createAction(Request $request)
{
    $content = $request->getContent();
    $json = json_decode($content);
    
    //some checking for existing user id
    $user = new User();
    $user->setId($this->getUser()->getId());
    
    $repository = $this->getDoctrine()->getRepository('AppBundle:Document');
    
    $document = new Document();
    $document->setTitle($json->title);
    $document->setUsers($user);
    
    $em = $this->getDoctrine()->getManager();
    $em->persist($document);
    $em->flush();
    
    return new JsonResponse($json);
}

此外,需要注意的是,调试时应该检查$this->getUser()->getId()是否正确,而不是检查数据库或实体本身。

通过以上的修改,我们可以解决Integrity constraint violation: 1048 Column 'user_id' cannot be null的问题。

0
0 Comments

问题的原因是在将用户ID设置给文档对象时,使用了错误的方法。解决方法是使用正确的方法来设置用户,而不是使用错误的方法。

具体来说,将$document->setUserId($id);代码替换为$document->setUser($this->getUser());。Doctrine知道如何管理关联关系并正确填充用户ID,因此不需要使用setUserId方法。

希望这个解决方法能够帮到你。

如果这个回答或任何其他回答解决了你的问题,请考虑接受它,点击选中的标记。这样可以向更广泛的社区表明你已经找到了解决方案,并为回答者和你自己赢得一些声誉。这并不是义务性的。

0