hell0w0rd
@hell0w0rd
Просто разработчик

Разобраться с Doctrine?

Есть два объекта-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>
  • Вопрос задан
  • 4797 просмотров
Решения вопроса 1
slimus
@slimus
Symfony, Golang
1. Как у вас форма создается? Если ей подсунуть чистую модель — должно все сохраняться автоматически.
2. Не совсем понятен вопрос. Вы выбираете пост а у него делаете ->getDogs(). Как вы планируете использовать эти данные
3. Мы используем метод описанный в документации: symfony.com/doc/master/cookbook/form/form_collections.html

PS: ошибки добавьте под спойлер
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы