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



以下代码成功地将Mutiple Images上传到Web/Images/Album,但在MySQL中唯一的一张记录是更新的。因此,在显示图像时仅显示一个图像。由于我是Symfony的新手,所以我不知道该怎么做。任何人都可以指导我如何获取图像的所有名称并将其名称插入mysql ??

实体

class album  
{
/**
 * @var int
 *
 * @ORMColumn(name="id", type="integer")
 * @ORMId
 * @ORMGeneratedValue(strategy="AUTO")
 */
private $id;
/**
 * @var string
 *
 * @ORMColumn(name="albumName", type="string", length=255)
 */
private $albumName;
/**
 * @var string
 *
 * @ORMColumn(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()
    ]);
}

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

您可以制作一个图像类和专辑类,并将许多图像映射到一个专辑中,然后为每个图像创建多个图像对象,然后将它们设置为所述专辑...

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

use DoctrineCommonCollectionsArrayCollection;
/** @Entity */
class Album
{
    // ...
    /**
     * One Album has Many Images.
     * @ORMOneToMany(targetEntity="Image", mappedBy="album")
     */
    private $images;
    // ...
    public function __construct() {
        $this->images = new ArrayCollection();
    }
}
/** @Entity */
class Image
{
    // ...
    /**
     * Many Images have One Album.
     * @ORMManyToOne(targetEntity="Album", inversedBy="images")
     * @ORMJoinColumn(name="album_id", referencedColumnName="id")
     */
    private $album;
    // ...
}

然后,在从表单中处理请求时,您应该将图像添加到阵列汇编中。这样的东西:

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

当然,您将有很多。

此处和此处查看有关学说协会的更多信息。

相关内容

  • 没有找到相关文章

最新更新