更新关系映射后,Symfony 2 原则坚持不起作用
Posted
技术标签:
【中文标题】更新关系映射后,Symfony 2 原则坚持不起作用【英文标题】:Symfony 2 doctrine persist doesn't work after updating Relationship Mapping 【发布时间】:2014-12-22 02:56:52 【问题描述】:我更新了我的实体文件以包含关系映射。
Persist 在更新之前有效,现在无效。
也许这是我忘记做的事情。
命名空间类\classBundle\Entity; 使用 Doctrine\ORM\Mapping 作为 ORM; /** * 顾问计划 * * @ORM\Table() * @ORM\实体 */ 班级顾问计划 /** * * @ORM\ManyToOne(targetEntity="plans", inversedBy="adviserPlans") * @ORM\JoinColumn(name="planid", referencedColumnName="id") */ 公共$计划; /** * @var 整数 * * @ORM\Column(name="id", type="integer") * @ORM\ID * @ORM\GeneratedValue(strategy="AUTO") */ 公共$id; /** * @var 整数 * * @ORM\Column(name="userid", type="integer") * * */ 公共$用户ID; /** * @var 整数 * * @ORM\Column(name="adviserid", type="integer") * * */ 公共 $adviserid; /** * @var 整数 * * @ORM\Column(name="planid", type="integer") * * */ 公共 $planid; /** * @var 字符串 * * @ORM\Column(name="participantLoginWebsiteAddress", type="string", length=255) */ 公共 $participantLogin 网站地址; 公共函数 __construct() $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $key => $value) if ($key != "计划") $this->$key = "";
Perist 返回错误,说 planid 为空。如果我删除以下内容,它会起作用。
/** * * @ORM\ManyToOne(targetEntity="plans", inversedBy="adviserPlans") * @ORM\JoinColumn(name="planid", referencedColumnName="id") */这是我坚持的代码。
$adviserPlan = 新的顾问计划(); $adviserPlan->planid = $planid; $adviserPlan->userid = $this->userid(); $adviserPlan->adviserid = $session->get("editadviserid"); $em->persist($adviserPlan);我应该填充 plan 字段而不是 planid 字段还是我的实体文件编码错误。
【问题讨论】:
【参考方案1】:您不应该设置 ID。您应该设置实体:
$adviserPlan = new advisersPlans();
// You should retrieve the plan before doing this, of course.
$adviserPlan->setPlan($plan);
$plans->addAdviserPlan(§adviserPlan);
$em->persist($adviserPlan);
添加实体到集合的方法应该是运行时通过doctrine生成的:
php app/console doctrine:generate:entities YourBundle
【讨论】:
谢谢!它最终会像我想要的那样在通话后设置用户 ID。您需要整个对象来更新 userid 字段似乎有点低效(必须查询对象本身,并将对象复制过来)。但是,它绝对不容易出错。以上是关于更新关系映射后,Symfony 2 原则坚持不起作用的主要内容,如果未能解决你的问题,请参考以下文章