OneToMany в Doctrine ORM Картирование с изображениями Dropzone

У меня есть форма в Symfony, где есть dropzone, использующий dropzone.js для загрузки изображений, когда изображения загружаются, путь к изображению вместе с идентификатором текущего экземпляра объекта, к которому относится форма, загружаются в Image стол как imageName а также listing_id соответственно. listing_id это id текущего списка, который заполняет пользователь. Так как у меня будет несколько изображений на листинг, мне интересно, возможно ли сохранить OneToMany отношения между listing объект и изображения.

Когда пользователь нажимает «Добавить объявление», listing объект создается с нулевыми значениями в виде черновика (кроме идентификатора), и после этого изображения сбрасываются, поэтому впоследствии они добавляются в БД.

Listing.php

/**
* @ORM\OneToMany(targetEntity="Image", mappedBy="listing", cascade={"persist"}, orphanRemoval=true)
*/
private $images;

image.php

/**
* @ORM\ManyToOne(targetEntity="Listing", inversedBy="images")
* @ORM\JoinColumn(name="listing_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $listing;

Это приводит к ошибке при сбросе изображения, но если я изменю $listing в

 /**
* @ORM\Column(type="integer", nullable=true, name="listing_id")
*/
protected $listing;

Это работает, но я собираюсь получить изображения позже, используя listing объект, так что это не желаемый результат. Мой вопрос заключается в том, могу ли я сохранять такую ​​связь между этими двумя значениями, даже если объект изображения создается в другое время (позднее), чем в листинге. На самом деле, я получаю сообщение об ошибке, когда помещаю что-то в зону удаления с помощью этих аннотаций.

Поскольку строки изображений вставляются в таблицу в режиме реального времени, а не при отправке формы, это может вызвать ошибку при использовании такого рода связей, но я не уверен.

0

Решение

Вы на правильном пути. Я использую oneup / uploader-bundle для этой задачи.

Нужен правильный @ManyToOne. @ Колонна не будет работать.

Но в моем случае это было встроенное изображение с дополнительными данными.

Я должен был деактивировать автозагрузку в dropzone и вручную обработать dropzone
вызов и настройки, чтобы включить дополнительные поля формы.

Существует также возможность начать загрузку вручную, а не сразу после удаления файла.
Таким образом, можно создать целое с помощью одного запроса на публикацию без предварительного сохранения списка с идентификатором …

Я надеюсь, что это помогает. Я могу поделиться своим кодом, но не на машине прямо сейчас.

РЕДАКТИРОВАТЬ: Это мой код:

var myDropzone = new Dropzone("#documentTypeUploadDropzone", {

url : actionUrl,
dictDefaultMessage: 'Bitte das neue Dokument hier ablegen!',

// The configuration we've talked about above
autoProcessQueue: false,

maxFiles: 1,
init: function () {
this.on('success', function(e, serverResponse) {

myDropzone.removeAllFiles();

});

this.on('sending', function(file, xhr, formData) {
// Add additional data form original <form> which was already checked by html5 client side verification
formData.append('productId', 1);
formData.append('documentType[name]', value1;
formData.append('documentType[foreignUrl]',   $(#formInput).val());

});

var myDropzone = this;

$('#documentTypeUploadForm').on('submit', function(e) {
// Make sure that the form isn't actually being sent.
e.preventDefault();
e.stopPropagation();


var files = myDropzone.getQueuedFiles();
if (!files.length) {
$.growl.error({ title:"Fehler", message: 'Bitte zuerst ein Dokument zum Hochladen auswählen.'});
return
}


myDropzone.processQueue();
});


}
});
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]