Symfony2和Doctrine:OneToMany关系复制表中的数据

米洛斯

我有两个表格:文章和电子邮件。电子邮件表将包含与特定文章相关的电子邮件,例如:

id    |  article_id |     email
1     |      1      |  [email protected]
2     |      1      |  [email protected]
3     |      2      |  [email protected]
4     |      2      |  [email protected]

等等....

article_id与articles表中的id之间存在关系。

在我的实体中,我有以下代码:

class Articles
{ 
    ....
     /**
      * @ORM\OneToMany(targetEntity="\Acme\DemoBundle\Entity\Emails", mappedBy="articles")
      */
      private $emails_rel; 

    ...
}

class Emails
{ 
    /**
     * @ORM\ManyToOne(targetEntity="\Acme\DemoBundle\Entity\Articles", inversedBy="emails_rel", cascade={"all"})
     * @ORM\JoinColumn(name="article_id", referencedColumnName="id")
     **/
    private $articles; 
}

在我的控制器中,我正在进行一些测试,这些测试将持久化或不持久化某些实体。最后,我正在冲洗

$em->flush(); 

奇怪的是,在我的“电子邮件”表中,数据在刷新后立即被复制。在测试实体管理器时

$em->getUnitOfWork()->getScheduledEntityInsertions()

我得到一个空数组。

知道为什么吗?非常感谢你。

编辑:

这是测试:

$articl = new Articles();
$articl = $em->createQuery("SELECT p FROM Acme\DemoBundle\Entity\Articles p WHERE p.bMailToMatch = 1")->getResult();
$nb = count($articl);

// BECAUSE I WILL WORK WITH A LOTS OF ENTRIES - PREVENT MEMORY OVERFLOW
$em->clear();    

if(isset( $articl )) {
    foreach($articl as $i => $art) {
        $array_emails = null;

        $art_emails = $art->getEmailsRel();
        foreach ($art_emails as $e) {
            $array_emails[] = $e->getEmail();
        }

        $art_id = $art->getId ();
        echo "\n\n---------- $i ----------\n " . $art->getDoi ();

        // TAKES ARTICLE WITH ZERO EMAIL
        if (!isset($array_emails) ) {
            $updated_article = $em->getRepository('AcmeDemoBundle:Articles')->findOneBy(array( 'id' => ($art_id)    )) ; 
            // Because of the clearing of the entity manager
            echo"\n\n$art_id Article DOI \n".$updated_article->getDoi();
            echo "\n==>Put the BMailToMatch's flag to 0";
            $updated_article->setBMailToMatch(0);
            $em->persist($updated_article);
        }
        else {
            echo " ==> ok\n";
        }

        if (($i % 3) == 0) {
            $em->flush();
            $em->clear();
        }
    }

    $em->flush();
    $em->clear();
}

return new Response ( "\n\nFinished!!\n" );             
伦尼伯纳德

在转载之前,我没有发现您的问题,但是现在这很明显了。您的问题来自使用clear方法。实际上,如果您清除实体经理,它将忘记他们的存在,并将其保留为新的。

如果您遇到性能问题,则可以限制要处理的项目数,然后递归执行直到完成。

希望对您有帮助;)

祝你好运

干杯

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

组,消息和位置之间的Symfony2 / Doctrine2数据库关系

symfony2中的可选多个oneToMany关系

Symfony2 / Doctrine:使用OneToMany基数来查找

内部联接如何使用Doctrine和Symfony2处理多对多关系

doctrine2 symfony2关系实体

Symfony2 / Doctrine不会建立多对多关系

计算多对多关系项目Doctrine,Symfony2

Doctrine 中的 OneToMany 和 ManyToOne 关系 - 奇怪的映射错误

Symfony2和Doctrine 2结果数据错误地返回空数组

定义和使用Symfony2和Doctrine2中的ENUM类型的正确方法

Doctrine 2 ORM-在oneToMany关系中搜索(QueryBuilder)

Symfony2中的条件关系

如何从数据库中的现有数据生成子弹字段-Doctrine Symfony2

symfony2 doctrine2中的var_dump数据过多

Symfony2 \ Doctrine-数据库中的存储阵列

SonataAdmin和Symfony2中的一对多关系和添加/编辑表单

Symfony2和Doctrine2-设置为onDelete

Symfony2和Doctrine实体未定义方法

使用Doctrine DQL和Symfony2的createQueryBuilder leftJoin

notBlank约束不适用于文件输入-具有OneToMany关系的表单Symfony2

Symfony2在Doctrine Fixtures中执行SQL文件

Symfony2 Doctrine从CLI中的文件运行SQL

如何使用Doctrine在Symfony2中创建复杂的表单

Symfony2 Doctrine2多对多将所有实体及其关系实体

Doctrine2 + Symfony2:如何在Symfony2中使用命名空间的Doctrine实体?

删除Symfony2中的数据

从symfony2中的表单获取数据

使用带有Symfony2的Doctrine查询多对多关系

Doctrine OneToMany 关系的问题