vich upload bundle - изображение и фотография в одном объекте - файл только для документов хранится в БД
Я хочу загрузить и сохранить оба файла: документ и изображение обложки документа в моей БД. Но есть только файл столбца. Второе изображение не внутри.
Вот как выглядит мой класс сущности:
class Document
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="document_title", type="string", length=255)
*/
private $documentTitle;
/**
* @ORM\Column(type="string", length=255)
* @var string
*/
private $fileName;
/**
*@Vich\UploadableField(mapping="user_documents", fileNameProperty="fileName")
* @var File
*/
private $documentFile;
/*
* @ORM\Column(type="string", length=255)
* @var string
*/
private $coverName;
/**
*@Vich\UploadableField(mapping="documents_covers", fileNameProperty="coverName")
* @var File
*/
private $documentCover;
/**
* @ORM\ManyToOne(targetEntity="Foo\UserBundle\Entity\User", inversedBy="documents")
**/
private $owner;
}
Вот как выглядят мои сеттеры:
public function setDocumentFile(File $documentFile = null)
{
$this->documentFile = $documentFile;
if ($documentFile){
$this->updatedAt = new \DateTime('now');
}
return $this;
}
/**
* @param File $documentCover
*/
public function setDocumentCover(File $documentCover = null)
{
$this->documentCover = $documentCover;
}
И мой конфиг загрузчика вич:
vich_uploader:
db_driver: orm
storage: file_system
mappings:
documents_covers:
uri_prefix: %app.path.documents_covers%
upload_destination: %kernel.root_dir%/../web/uploads/images/documents
namer: vich_uploader.namer_uniqid
user_documents:
uri_prefix: %app.path.user_documents%
upload_destination: %kernel.root_dir%/../web/uploads/files/user/documents
namer: vich_uploader.namer_uniqid
Когда я просматриваю там каталоги, там существуют файлы, но когда я смотрю в БД, есть только $documentFile. Данные таблицы документов
2 ответа
Кажется, вам следует обновить схему базы данных. Вы можете использовать эту команду:
php app/console doctrine:schema:update --force
Но если у вас есть производственная среда, это не хороший способ обновить схему вашей базы данных. В этом случае вы должны создать миграцию.
Также я предлагаю реализовать свой установщик setDocumentCover следующим образом, чтобы избежать ошибки сохранения файла в случае обновления только одного поля (documentCover) в вашей сущности.
public function setDocumentCover(File $documentCover = null)
{
$this->documentCover = $documentCover;
if ($documentCover){
$this->updatedAt = new \DateTime('now');
}
return $this;
}
Выглядит как $coverName
поле не правильно определено. Это должно быть так (обратите внимание, как объявлен докблок):
/**
* @ORM\Column(type="string", length=255)
* @var string
*/
private $coverName;