Есть два объекта-entity. Связь между ними — один к многим.
#obj1
manyToOne:
post:
targetEntity: Site\DeskBundle\Entity\Post
cascade:
- persist
inversedBy: dogs
joinColumns:
post_id:
referencedColumnName: id
#obj2
oneToMany:
dogs:
targetEntity: Site\DeskBundle\Entity\Dog
mappedBy: post
Остальные поля убрал — роли не играют.
Вопрос 1:
можно ли упростить эту конструкцию:
$post = $form->getData()->setAddDate();<br>
$dogs = $post->getDogs();<br>
if (!empty($dogs)) {<br>
$em = $this->getDoctrine()->getManager();<br>
$em->persist($post);<br>
foreach ($dogs as $dog) {<br>
$dog->setPost($post);<br>
$em->persist($dog);<br>
}<br>
$em->flush();<br>
}<br>
Фактически это должна делать опция
cascade - persist
, но вылетают ошибки, могу сказать какие.
вопрос 2:
как без queryBuilder получить пост+собак? То есть надо банально сджойнить по id, но как это сделать через ORM?
ну и 3 вопрос, не особо важный:
можно ли динамическое добавление сделать как-то лучше, вот мой код:
var template = {<br>
code: '{{ form_widget(form.dogs.vars.prototype) }}',<br>
count: 0,<br>
max: 6<br>
};<br>
function addDog(obj) {<br>
var dogs = document.getElementById("add_dog_place");<br>
template.count++;<br>
if (template.count < template.max) {<br>
var dog = document.createElement("li");<br>
dog.innerHTML = template.code.split('__name__').join(template.count.toString());<br>
dogs.appendChild(dog);<br>
} else {<br>
obj.setAttribute("disable", "true");<br>
}<br>
}<br>