在服务器文件夹中上传多个图像,但在mysql中只插入一个记录

时间:2017-12-07 07:30:15

标签: symfony doctrine-orm orm symfony-forms symfony-3.3

以下代码成功将多个图像上传到web / images / album,但只有一个记录在mysql中更新。 因此,在显示图像时,仅显示一个图像。 由于我是symfony的新手,我不知道该怎么做。 任何人都可以指导我如何获取图像的所有名称并在mysql中插入其名称吗?

实体

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

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

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


/**
 * Get id
 *
 * @return int
 */
public function getId()
{
    return $this->id;
}

/**
 * Set albumName
 *
 * @param string $albumName
 *
 * @return album
 */
public function setAlbumName($albumName)
{
    $this->albumName = $albumName;

    return $this;
}

/**
 * Get albumName
 *
 * @return string
 */
public function getAlbumName()
{
    return $this->albumName;
}

/**
 * Set imageName
 *
 * @param string $imageName
 *
 * @return album
 */
public function setImageName($imageName)
{
    $this->imageName = $imageName;

    return $this;
}

/**
 * Get imageName
 *
 * @return string
 */
public function getImageName()
{
    return $this->imageName;
}
 }

表格

     $builder->add('albumName', TextType::class)
               ->add('imageName', FileType::class, array(
                'multiple' => true,
                'data_class' => null
            ))
               ->add('save', SubmitType::class, array('label' => 'Submit',        'attr' => array('class' => 'btn btn-primary')));

控制器

  public function indexAction(Request $request) {

    $albumMember = new album();

    $galleryView = $this->createForm(imageUpload::class, $albumMember);
    $galleryView->handleRequest($request);
    if ($galleryView->isSubmitted() && $galleryView->isValid()) {

        /**
         * @var UploadedFile $file
         */
        $file = $albumMember->getImageName();
        foreach ($file as $count) {
            $fileName = md5(uniqid()) . '.' . $count->guessExtension();

            $count->move(
                    $this->getParameter('image_directory'), $fileName
            );
            $albumMember->setImageName($fileName);

            $albumName = $galleryView['albumName']->getData();
            $albumMember->setAlbumName($albumName);
        }
        $em = $this->getDoctrine()->getManager();
        $em->persist($albumMember);
        $em->flush();

        $this->addFlash('notice', 'Images Added');
        return $this->redirectToRoute('createGallery');
    }

    return $this->render('admin/galleryView.html.twig', [
                'galleryView' => $galleryView->createView()
    ]);
}

2 个答案:

答案 0 :(得分:0)

这是因为每个专辑只有一列名为图像名称,实际上你需要有多个图像。你必须建立一个多关系 https://symfony.com/doc/current/doctrine/associations.html

制作图像类和相册类,将许多图像映射到一个相册,然后为每个图像创建多个图像对象并将它们设置为所述相册...

答案 1 :(得分:0)

对于您如何定义Album实体,它只期望一个图像,而不是很多图像。您应该重新访问您的实体,以便在其中使用Album和许多Image之间的一对多关联。

use Doctrine\Common\Collections\ArrayCollection;

/** @Entity */
class Album
{
    // ...
    /**
     * One Album has Many Images.
     * @ORM\OneToMany(targetEntity="Image", mappedBy="album")
     */
    private $images;
    // ...

    public function __construct() {
        $this->images = new ArrayCollection();
    }
}

/** @Entity */
class Image
{
    // ...
    /**
     * Many Images have One Album.
     * @ORM\ManyToOne(targetEntity="Album", inversedBy="images")
     * @ORM\JoinColumn(name="album_id", referencedColumnName="id")
     */
    private $album;
    // ...
}

然后,当从表单处理请求时,您应该将图像添加到ArrayCollection。像这样:

$album->getImages->add($image)

当然,你会有吸气剂/安装者。

详细了解Doctrine association herehere