1

現在、次のものが存在します。

リスティングエンティティ

class Listing {

/**
 * @var integer $id
 *
 * @ORM\Column(name="listing_id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string $title
 *
 * @ORM\Column(name="title", type="string", length=255)
 */
private $title;

/**
 * @ORM\ManyToOne(targetEntity="IntA\UserBundle\Entity\User", cascade ={"delete"}, inversedBy="listings")
 * @ORM\JoinColumn(onDelete="CASCADE")
 */
protected $user;



 /**
 * @ORM\OneToMany(targetEntity="IntA\UploadBundle\Entity\Gallery", mappedBy="listing_gallery")     
 *
 * @var ArrayCollection $image
 */
private $image;
.
.
.
 /**
 * @ORM\ManyToMany(targetEntity="IntA\Bundle\Entity\Tag", cascade={"persist"})
 * @ORM\JoinTable(name="listing_tag",
 *     joinColumns={@ORM\JoinColumn(name="listing_id", referencedColumnName="listing_id")},
 *     inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
 * )
 *
 * @var ArrayCollection $tags
 */
protected $tags; 

タグエンティティ(存在しますが、この問題に関連しないコード)

ギャラリーエンティティ

class Gallery
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 * 

 * @var integer $gallery_id
 */
protected $gallery_id;
/**

 * @ORM\ManyToOne(targetEntity="IntA\Bundle\Entity\Listing", inversedBy="image")
   @ORM\JoinColumn(name="listing_id", referencedColumnName="listing_id")
 * @var integer 
 */
protected $listing_gallery;

/**
 * @ORM\Column(type="string", length="255")
 * 
 * @var string $name;
 */
protected $name;

/**
 * @ORM\Column(type="string", length="255")
 * 
 * @var string $description;
 */
protected $description;

/**
 * @ORM\Column(type="datetime", name="date_created")
 * 
 * @var DateTime $date_created
 */
protected $date_created;

 /**
 * @ORM\Column(type="datetime", name="date_updated")
 * 
 * @var DateTime $date_updated
 */
protected $date_updated;

 /**
 * @ORM\Column(type="text", length="255")
 * 
 * @var string $url;
 */    
public $url;



public $file = array();

ギャラリーコントローラー

public function uploadAction($id)
{
    $file = new Gallery();
    $images_form    = $this->createForm(new GalleryType(), $file); 
    $form_view = $images_form->createView();
    $form_view->getChild('file')->set('full_name', 'gallery[file][]');
    $request = $this->getRequest();
    #die(var_dump($request->files));
    if ($request->getMethod() === 'POST') {
        $images_form->bindRequest($request);            

        $data = $images_form->getData();   
        #die(var_dump($images_form->getData()->getFile()));



            $em = $this->getDoctrine()->getEntityManager();
            $em->persist($file);

            $related_listing = $em->getRepository('IntABundle:Listing')->find($id);
            $related_listing->setImage($data);

            foreach($images_form->getData()->getFile() AS $singleUploadedFile){

            $related_listing->setImage($singleUploadedFile);
            $em->persist($related_listing);

            }



            $em->flush();

            $uploadedFiles = $em->getRepository('IntABundle:Listing')->findAllImagesPerListing($id);



            return $this->render('UploadBundle:Gallery:view_uploaded.html.twig', array(
                                    'uploadedFiles'      => $uploadedFiles,                                        
                                ));
    }

    return $this->render('UploadBundle:Gallery:upload.html.twig', array(
        'images_form' => $form_view,
        'id' => $id,
    ));


}

リストの作成(image = ""を使用)は、フォーム上で問題なく機能します。ユーザーが複数の画像を含む「ギャラリー」をアップロードできる別のフォームを作成しました。画像はうまくアップロードされますが、ユーザーが作成した既存のリストオブジェクトと、ユーザーがリストオブジェクトに関連付けたいギャラリーオブジェクト内の画像を接続する方法がわかりません。

問題への私のアプローチが正しいかどうか、またはより良いアプローチが存在するかどうかはわかりません。現在、両方のオブジェクトを作成できますが、それらの間に適切なリンクを作成することはできません。2つの異なるフォーム間でオブジェクトを関連付けるためのサンプルコードはありますか?おそらく私は適切な場所を探していません!

4

1 に答える 1

1

教義関係の所有側と逆側を確認してください:http: //docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/association-mapping.html

私が見る限り、多くの側が所有者でなければならないので、あなたはギャラリーから関係を設定する必要があります。

すなわち

$gallery->setListing($listing);

それよりも

$listing->setImage($gallery)

関係の逆側は、保存しようとしたときに関係を保存しないためです。

これにより、アクションは次のようになります。

public function uploadAction($id)
{
    $file = new Gallery();
    $images_form = $this->createForm(new GalleryType(), $file);
    $form_view = $images_form->createView();
    $form_view->getChild('file')->set('full_name', 'gallery[file][]');
    $request = $this->getRequest();
    if ($request->getMethod() === 'POST') {
        $images_form->bindRequest($request);

        $em = $this->getDoctrine()->getEntityManager();

        $related_listing = $em->getRepository('IntABundle:Listing')->find($id);
        $file->setListingGallery($related_listing);
        $em->persist($file);
        $em->flush();

        $uploadedFiles = $em->getRepository('IntABundle:Listing')
            ->findAllImagesPerListing($id);



        return $this->render('UploadBundle:Gallery:view_uploaded.html.twig', array(
                'uploadedFiles' => $uploadedFiles,
            ));
    }

    return $this->render('UploadBundle:Gallery:upload.html.twig', array(
            'images_form' => $form_view,
            'id' => $id,
        ));
}
于 2012-06-12T08:09:31.993 に答える