完整性约束违例:1048 列 'user_id' 不能为空
完整性约束违例: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不能为空。有人可以帮我吗?
文章标题: 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的问题。
问题的原因是在将用户ID设置给文档对象时,使用了错误的方法。解决方法是使用正确的方法来设置用户,而不是使用错误的方法。
具体来说,将$document->setUserId($id);
代码替换为$document->setUser($this->getUser());
。Doctrine知道如何管理关联关系并正确填充用户ID,因此不需要使用setUserId方法。
希望这个解决方法能够帮到你。
如果这个回答或任何其他回答解决了你的问题,请考虑接受它,点击选中的标记。这样可以向更广泛的社区表明你已经找到了解决方案,并为回答者和你自己赢得一些声誉。这并不是义务性的。