更新关系映射后,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 原则坚持不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 应用程序中的原则实体和业务逻辑

OneToOne 双向关系的错误映射原则

使用dwr后,javaweb设置的session超时失效,web.xml和tomcat设置都不起作

坚持原则2“类不存在”

Symfony2 3 个实体之间的映射

无法使用 sonataClassificationBundle 更新数据库 symfony 4