【问题标题】:Symfony 2 doctrine persist doesn't work after updating Relationship Mapping更新关系映射后,Symfony 2 原则坚持不起作用
【发布时间】: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 字段还是我的实体文件编码错误。

【问题讨论】:

    标签: symfony doctrine mapping entity relationship


    【解决方案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 字段似乎有点低效(必须查询对象本身,并将对象复制过来)。但是,它绝对不容易出错。
    猜你喜欢
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    相关资源
    最近更新 更多