首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Symfony2 Doctrine2列设置为null

Symfony2 Doctrine2列设置为null
EN

Stack Overflow用户
提问于 2012-09-06 20:28:36
回答 2查看 1.4K关注 0票数 1

我有一个系统,它采用了详细说明项目的形式信息,将其添加到项目表中,并打算将条目添加到分配的项目表中,以便将用户与项目关联(这一点是允许每个项目有多个用户)。无论如何,我在没有外键的情况下工作,努力添加它们,但最终还是得到了它们。

不幸的是,每当向assignedProjects表中添加内容时,此附加操作都会导致错误'SQLSTATE23000:完整性约束冲突: 1048列'projectId‘不能为null’。

所以我的问题是,我是不是在代码中遗漏了什么?

向assignedProjects添加新行的代码:

代码语言:javascript
复制
$assignedProject = new AssignedProjects();
$assignedProject->setProjectId($project->getId());
$assignedProject->setUserId($user[0]['id']);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($assignedProject);
$em->flush();

assignProjects实体代码:类AssignedProjects { /** * @var integer $id ** @ORM\Column(name="id",type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id;

代码语言:javascript
复制
/**
 * @var integer $projectId
 *
 * @ORM\Column(name="projectId", type="integer")
 */
private $projectId;

/**
* @ORM\ManyToOne(targetEntity="Projects", inversedBy="assignment")
* @ORM\JoinColumn(name="projectId", referencedColumnName="id")
*/
private $project;


/**
 * @var integer $UserId
 *
 * @ORM\Column(name="userId", type="integer")
 */
private $userId;

/**
* @ORM\ManyToOne(targetEntity="Dev\UserBundle\Entity\User", inversedBy="assignment")
* @ORM\JoinColumn(name="userId", referencedColumnName="id")
*/
private $user;

(后面是常用的getter和setter)

项目表实体为:

代码语言:javascript
复制
class Projects
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string $projectName
*
* @ORM\Column(name="projectName", type="string", length=255)
*/
private $projectName;


/**
* @ORM\OneToMany(targetEntity="AssignedProjects", mappedBy="project")
*/
protected $assignment;

任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-06 20:50:25

您可以使用ProjectId和UserId列并手动管理关系(不推荐),也可以使用信条关系(推荐),但不要同时执行这两项操作。如果您选择第二种方法,请不要包含projectId和userId列,它们是由doctrine自动为您创建的。因此,您的AssignedProjects类应该是:

代码语言:javascript
复制
class AssignedProjects {
/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\ManyToOne(targetEntity="Projects", inversedBy="assignment")
 * @ORM\JoinColumn(name="projectId", referencedColumnName="id")
 */
private $project;


/**
 * @ORM\ManyToOne(targetEntity="Dev\UserBundle\Entity\User", inversedBy="assignment")
 * @ORM\JoinColumn(name="userId", referencedColumnName="id")
 */
private $user;

在你的控制器中,你可以这样做:

代码语言:javascript
复制
$assignedProject = new AssignedProjects();
$assignedProject->setProject($project);
$assignedProject->setUser($user[0]);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($assignedProject);
$em->flush();

请注意,我设置的是Project和User字段,而不是ids

顺便说一句,除非您需要保存有关此项目分配的额外数据(如日期或类似数据),否则您可以声明用户和项目之间的直接ManyToMany关系,并删除此类,Doctrine将自动生成所需的表

票数 0
EN

Stack Overflow用户

发布于 2012-09-06 20:52:31

使用Doctrine2,您不必声明外键(projectId),而只需声明关联(项目)。因此您可以删除$projectId属性以及setProjectIdgetProjectId方法。对$user的修复也是一样的。

相反,您将像这样使用setProject:

代码语言:javascript
复制
$assignedProject = new AssignedProjects();
$assignedProject->setProject($project);
$assignedProject->setUser($user[0]);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($assignedProject);
$em->flush();

看看Doctrine2文档,它肯定会对你有帮助!http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/association-mapping.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12300153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档