1

私は次の2つのエンティティを持っています:

<?php

namespace Site\AnnonceBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Site\UserBundle\Entity\User;

/**
 * Site\AnnonceBundle\Entity\Sujet
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Site\AnnonceBundle\Entity\SujetRepository")
 */
class Sujet
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    //Some code...

    /**
     * 
     * @ORM\ManyToOne(targetEntity="Site\UserBundle\Entity\User")
     */
    private $user;

    //getter/setter....

ユーザーエンティティ(FOSUserBundle):

<?php
namespace Site\UserBundle\Entity;
use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table()
 * 
 */
class User extends BaseUser{


    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;    

    public function getId() {
        return $this->id;
    }


}

「Sujet」を作成したとき、(SujetController.phpで)次のように作成しました。

        $em = $this->getDoctrine()->getEntityManager();
        $sujet->setResolu(false);
        $em->persist($sujet);

        $em->flush();

その動作、しかしデータベースに挿入された「Sujet」はユーザーnullを参照しています...したがって、2番目のバージョンではこれを作成しました:

        $em = $this->getDoctrine()->getEntityManager();
        $sujet->setResolu(false); 
        $sujet->setUser(new User($this->get('session')->get('user_id')))  ;//the user is already in the DB
        $em->persist($sujet);
        $em->flush();

しかし、私はこのエラーを受け取ります:

A new entity was found through the relationship 'Site\AnnonceBundle\Entity\Sujet#user' that was not configured to cascade persist operations for entity: . Explicitly persist the new entity or configure cascading persist operations on the relationship. If you cannot find out which entity causes the problem implement 'Site\UserBundle\Entity\User#__toString()' to get a clue.

私は理解していません。私はすでに別のORM(JPA)と連携しており、そのように機能します...データベースにすでに存在するエンティティに関連するものを「Sujet」に伝える方法は?

(私の英語が悪い場合は申し訳ありません)

編集:それは私のために働いた:

$user = $this->get('security.context')->getToken()->getUser();
$sujet->setUser($user);
$em->persist($sujet);
$em->flush();
4

1 に答える 1

2

念のため、エラーは、新しいユーザーを作成し、それを永続化せずにsujetにリンクしたという事実に起因していました(カスケードがないため、エンティティは永続化されていないエンティティにリンクされ、エラーが発生しました)。

あなたの編集は、あなたが以前に作った現在のユーザー(これは「新しいユーザー」とは異なり、永続化されています)を取得する方法を見つけたことを示唆しています。

あなたもやったかもしれません:

$repository = $this->getDoctrine()
    ->getEntityManager()
    ->getRepository('YourBundle:User');

$user = $repository->find($iduser); 
$sujet->setUser($user);

「別のユーザーのために」編集したいのであれば、それは良い解決策だったでしょう。

于 2012-06-21T09:56:38.557 に答える