symfony - SQLSTATE [23000]:违反完整性约束:1048 列 'user_id' 不能为空
问题描述
我正在使用 symfony 3.4。
我有链接到实体campagne(campaign)(一对多)的实体用户,当我想添加一个新的campagne时,会显示此错误:
使用参数 ["ycamp2", null] 执行 'INSERT INTO compagne (desc, user_id) VALUES (?, ?)' 时发生异常:
SQLSTATE [23000]:违反完整性约束:1048 列 'user_id' 不能为空
班坎帕涅:
class Campagne
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @var string|null
*
* @ORM\Column(name="desc", type="string", length=255, nullable=true, unique=true)
*
*/
private $desc;
/**
* @ORM\ManyToOne(targetEntity="XxBundle\Entity\User", inversedBy="campagnes")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
//...
/**
* Set user.
*
* @param \XxBundle\Entity\User $user
*
* @return Campagne
*/
public function setUser(\XxBundle\Entity\User $user)
{
$this->user = $user;
return $this;
}
/**
* Get user.
*
* @return \XxBundle\Entity\User
*/
public function getUser()
{
return $this->user;
}
}
班级用户:
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
//...
/**
* @ORM\OneToMany(targetEntity="XxBundle\Entity\Campagne", mappedBy="user", cascade={"persist", "remove"})
*/
private $campagnes;
// .................CAMPAGNE..............
/**
* Add campagne.
*
* @param \XxBundle\Entity\Capagne $campagne
*
* @return User
*/
public function addCampagne(\XxBundle\Entity\Campagne $campagne)
{
$this->campagnes[] = $campagne;
return $this;
}
/**
* Remove campagne.
*
* @param \XxBundle\Entity\Campagne $campagne
*
* @return boolean TRUE if this collection contained the specified element, FALSE otherwise.
*/
public function removeCampagne(\XxBundle\Entity\Campagne $campagne)
{
return $this->campagnes->removeElement($campagne);
}
/**
* Get campagnes.
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getCampagnes()
{
return $this->campagnes;
}
}
运动控制器:
class CampagneController extends Controller
{
/**
* Lists all campagne entities.
*
*/
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$campagnes= $em->getRepository('XxBundle:Campagne')->findAll();
return $this->render('campagne/index.html.twig', array(
'campagnes' => $campagnes,
));
}
/**
* Creates a new campagne entity.
*
*/
public function newAction(Request $request)
{
$campagne = new Campagne();
$form = $this->createForm('XxBundle\Form\CampagneType', $campagne);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
return $this->redirectToRoute('campagne_show', array('id' => $campagne->getId()));
}
return $this->render('campagne/new.html.twig', array(
'campagne' => $campagne,
'form' => $form->createView(),
));
}
/**
* Finds and displays a campagne entity.
*
*/
public function showAction(Campagne $campagne)
{
$deleteForm = $this->createDeleteForm($campagne);
return $this->render('campagne/show.html.twig', array(
'campagne' => $campagne,
'delete_form' => $deleteForm->createView(),
));
}
/**
* Displays a form to edit an existing campagne entity.
*
*/
public function editAction(Request $request, Campagne $campagne)
{
$deleteForm = $this->createDeleteForm($campagne);
$editForm = $this->createForm('XxBundle\Form\CampagneType', $Campagne);
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('campagne_edit', array('id' => $campagne->getId()));
}
return $this->render('Campagne/edit.html.twig', array(
'campagne' => $campagne,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
));
}
/**
* Deletes a campagne entity.
*
*/
public function deleteAction(Request $request, Campagne $campagne)
{
$form = $this->createDeleteForm($campagne);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->remove($campagne);
$em->flush();
}
return $this->redirectToRoute('campagne_index');
}
/**
* Creates a form to delete a campagne entity.
*
* @param Campagne $campagne The campagne entity
*
* @return \Symfony\Component\Form\Form The form
*/
private function createDeleteForm(Campagne $campagne)
{
return $this->createFormBuilder()
->setAction($this->generateUrl('campagne_delete', array('id' => $campagne->getId())))
->setMethod('DELETE')
->getForm()
;
}
}
用户控制器:
class UserController extends Controller
{
/**
* Lists all user entities.
*
*/
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$users = $em->getRepository('XxBundle:User')->findAll();
return $this->render('user/index.html.twig', array(
'users' => $users,
));
}
/**
* Creates a new user entity.
*
*/
public function newAction(Request $request)
{
$user = new User();
$form = $this->createForm('XxBundle\Form\UserType', $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
return $this->redirectToRoute('user_show', array('id' => $user->getId()));
}
return $this->render('user/new.html.twig', array(
'user' => $user,
'form' => $form->createView(),
));
}
/**
* Finds and displays a user entity.
*
*/
public function showAction(User $user)
{
$deleteForm = $this->createDeleteForm($user);
return $this->render('user/show.html.twig', array(
'user' => $user,
'delete_form' => $deleteForm->createView(),
));
}
/**
* Displays a form to edit an existing user entity.
*
*/
public function editAction(Request $request, User $user)
{
$deleteForm = $this->createDeleteForm($user);
$editForm = $this->createForm('XxBundle\Form\UserType', $user);
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('user_edit', array('id' => $user->getId()));
}
return $this->render('user/edit.html.twig', array(
'user' => $user,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
));
}
/**
* Deletes a user entity.
*
*/
public function deleteAction(Request $request, User $user)
{
$form = $this->createDeleteForm($user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->remove($user);
$em->flush();
}
return $this->redirectToRoute('user_index');
}
/**
* Creates a form to delete a user entity.
*
* @param User $user The user entity
*
* @return \Symfony\Component\Form\Form The form
*/
private function createDeleteForm(User $user)
{
return $this->createFormBuilder()
->setAction($this->generateUrl('user_delete', array('id' => $user->getId())))
->setMethod('DELETE')
->getForm()
;
}
}
解决方案
您在NOT NULL
数据库表上遇到了约束。您要么需要更改表以允许插入空值,要么确保始终user_id
在请求中传递 a。
推荐阅读
- snowsql - Errno 22 无效参数:在 Snowsql 中
- c# - 如何使用 JwtToken 获取与特定用户相关的数据?
- python - python 3.7如何分配堆内存
- vmware-clarity - 连续多张卡片没有按预期间隔
- javascript - 400 错误请求上传到带有签名请求的 Amazon S3
- mysql - 修改现有电子邮件而不是创建新电子邮件
- r - 在大数据集中聚类相似的字符串
- python - Flask WTF 错误 - CSRF 会话令牌丢失(但实际上没有)
- python - sklearn管道转换ValueError,期望值不等于训练值
- swift - swift如何为此函数创建完成处理程序