当前位置: 首页 > 知识库问答 >
问题:

Symfony 2原则持久化在更新关系映射后不起作用

年运珧
2023-03-14

我更新了实体文件以包含关系映射。

namespace classes\classBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
/**
 * advisersplans
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class advisersPlans
{
    /** 
     * 
     * @ORM\ManyToOne(targetEntity="plans", inversedBy="adviserPlans")
     * @ORM\JoinColumn(name="planid", referencedColumnName="id")
     */
    public $plan;
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    public $id;
    /**
     * @var integer
     *
     * @ORM\Column(name="userid", type="integer")
     *
     *
     */
    public $userid;
    /**
     * @var integer
     *
     * @ORM\Column(name="adviserid", type="integer")
     *
     *
     */
    public $adviserid;
    /**
     * @var integer
     *
     * @ORM\Column(name="planid", type="integer")
     *
     *
     */
    public $planid;
    /**
     * @var string
     *
     * @ORM\Column(name="participantLoginWebsiteAddress", type="string", length=255)
     */
    public $participantLoginWebsiteAddress;

    public function __construct()
    {
        $class_vars = get_class_vars(get_class($this));
        foreach ($class_vars as $key => $value)
        {
            if ($key != "plan")
            $this->$key = "";

        }
    }
}
/** 
 * 
 * @ORM\ManyToOne(targetEntity="plans", inversedBy="adviserPlans")
 * @ORM\JoinColumn(name="planid", referencedColumnName="id")
 */

    $adviserPlan = new advisersPlans();
    $adviserPlan->planid = $planid;
    $adviserPlan->userid = $this->userid();
    $adviserPlan->adviserid = $session->get("editadviserid");
    $em->persist($adviserPlan);

共有1个答案

邢高爽
2023-03-14

你不应该设置ID。您应该设置实体:

$adviserPlan = new advisersPlans();
// You should retrieve the plan before doing this, of course.
$adviserPlan->setPlan($plan);
$plans->addAdviserPlan(§adviserPlan);
$em->persist($adviserPlan);

将实体添加到集合中的方法应该在运行时根据原则生成:

php app/console doctrine:generate:entities YourBundle
 类似资料:
  • 情况: 我有两个与OneTomany/ManyToone关系相关的实体。 想象一下,每个类也有一个名为id和getter和setter的PK。 问题: 如果我创建一个EntityA实例并设置一个与已经存在的EntityB实例的关系并持久化这个新实例,那么所有数据都会正确地保存到数据库中。但是,如果我从我的EntityManager请求EntityB的实例,它的列表中将不包含刚刚持久化的Entity

  • 我需要使用JPA存储一个复杂的树状对象结构。 有一个“顶级”类A,因此我可以在其上执行CASCADE. ALL,但我对类B的子对象和HashMap字段有问题。 映射的“键”是对象本身的哈希代码,存储为“值”。 当我级联持久化一个对象B时,数据库中的“键”列总是“null”(为什么?),即使对象有一些键值对。 我尝试了@MapKey之类的方法,但当我稍后从数据库加载对象时,键值不再是hashcode

  • 是否可以在每个实体的基础上实施条令2中的自定义水合作用和持久性? 原则2对价值对象(如集合和ID)有一些主要限制。我想知道是否可以使用自定义机制(或实现)将对象属性映射到数据库(加载和持久化)。 我知道有一些可能“解决”这个问题,但我不喜欢其中任何一个: 伪实体需要在实体中正确处理,从而将持久性层泄漏到域对象中 我知道条令中的生命周期事件可能是有用的。我无法确定postLoad事件是否携带一个已经

  • 我想使用Hibernate(4.3.6 Final)持久化一个以基本类型为键、非实体可嵌入复合类型值为值的映射。 我没有任何问题的基本类型作为键和值,我做了所有的方式一样,这是好的。当我将map值更改为可嵌入复合类型时遇到了问题,如下所示。 但我得到了错误: 原因:com.mysql.jdbc.exceptions.jdbc4.mysqlSyntaxerrorexception:“field li

  • 问题内容: 我正在尝试为各个字段使用不同的分析器设置ElasticSearch索引。但是,我似乎找不到一种设置特定于字段的分析器的方法。这是我创建(测试)索引的方法: 如果我正确阅读了文档,则应创建类型为“ tweet”的索引“ twitter”,并且应通过雪球词根分析器分析“ message”字段的内容。为了对此进行测试,我尝试了以下查询: 如果我没记错的话,那应该会受到打击,因为战斗是战斗的源

  • 我已经定义了对象HomeContentDTO和SubscriberUpsertDTO的映射 下面是这两个对象的映射配置 HomeContentDTO中的所有映射值都没有复制到SubscriberUpsertDTO。有人知道原因吗?