Symfony3 Получение данных из сущностей с ассоциацией ManyToMany

У меня проблема с ассоциацией ManyToMany. Я не могу понять, как получить данные из базы данных. У меня 2 сущности - Учитель и Предмет.

Тема класса

/**
 *
 * @ORM\ManyToMany(targetEntity = "Teacher", mappedBy = "subjects")
 */
private $teachers;


public function __construct() {

    $this->teachers = new ArrayCollection();
}

/**
 * Add teacher
 *
 * @param \AppBundle\Entity\Teacher $teacher
 *
 * @return Subject
 */
public function addTeacher(\AppBundle\Entity\Teacher $teacher)
{
    $this->teachers[] = $teacher;

    return $this;
}

/**
 * Remove teacher
 *
 * @param \AppBundle\Entity\Teacher $teacher
 */
public function removeTeacher(\AppBundle\Entity\Teacher $teacher)
{
    $this->teachers->removeElement($teacher);
}

/**
 * Get teachers
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getTeachers()
{
    return $this->teachers;
}

И Учитель сущностей

Классный руководитель

/**
 *
 * @ORM\ManyToMany(targetEntity = "Subject", inversedBy = "teachers")
 */
private $subjects;

public function __construct()
    {
        $this->subjects = new ArrayCollection();
    }

/**
 * Add subject
 *
 * @param \AppBundle\Entity\Subject $subject
 *
 * @return Teacher
 */
public function addSubject(\AppBundle\Entity\Subject $subject)
{
    $this->subjects[] = $subject;

    return $this;
}

/**
 * Remove subject
 *
 * @param \AppBundle\Entity\Subject $subject
 */
public function removeSubject(\AppBundle\Entity\Subject $subject)
{
    $this->subjects->removeElement($subject);
}

/**
 * Get subjects
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getSubjects()
{
    return $this->subjects;
}

Все, что я хочу сделать, это получить всю информацию от Учителя + Предметы, связанные с ними.

Как должен выглядеть мой контроллер для этого?

Я пытаюсь сделать это

   $teacher = $this->getDoctrine()->getRepository(Teacher::class)->findAll();

    return $this->render('admin/adminDashboard.html.twig', [
                'teachers' => $teacher]);

Но у меня все еще есть ошибки

какие ошибки вы получаете?

Scaramouche 25.03.2018 06:03

Я помещаю учителя в цикл foreach, где я ссылаюсь на метод getSubjects (например, @ domagoj03 посоветовал мне), а в Twig я сбрасываю (учитель), когда я это делаю, у меня больше нет ошибок, но ArrayCollection of Subjects пуст i.imgur.com/mptIJ79.jpg И я уверен у меня есть какая-то ассоциация в моей таблице Teacher_Subject

miguelsantos69 25.03.2018 21:39

И ошибка, которую я получил, когда пытаюсь отрендерить храм с помощью {{teacher.subjects}}: «Во время рендеринга шаблона возникло исключение (« Catchable Fatal Error: объект класса Doctrine \ ORM \ PersistentCollection не может быть преобразован. нанизывать").

miguelsantos69 25.03.2018 22:50

предполагая, что вы изменили имя $teacher на $teachers, передайте его в свой шаблон и попробуйте этот {% for t in teachers %}{{dump(t.subjects.count)}}{% endfor %}. который должен напечатать строку для каждого учителя с количеством предметов в каждом

Scaramouche 25.03.2018 23:37

Ага, работает. Как вы сказали, у меня есть три строки (у меня 3 учителя в db), и в каждой строке у меня есть номер 1 (у меня есть 3 предмета, каждый из которых связан с каждым учителем)

miguelsantos69 26.03.2018 00:09

Но у меня все еще есть проблема с его получением без дампа ()

miguelsantos69 26.03.2018 00:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
6
113
2

Ответы 2

Во-первых, я советую изменить вашу переменную $ учитель на $ учителя как Метод findAll () возвращает массив, поэтому вам нужно перебирать его. В вашем контроллере:

foreach($teachers as $teacher) { // Here you have $teacher and you can do $teacher->getSubjects() }

В вашем шаблоне веточки:

{% for teacher in teachers %}
  {{ dump(teacher) }}
{% endfor %}

Если это не сработает, сообщите нам, какие у вас ошибки. Все это при условии, что у вас есть записи внутри вашей базы данных или откуда бы вы ни извлекали свои объекты.

Это может означать, что либо у вас нет записей по предметам, связанным с упомянутой группой учителей, либо что-то не так с вашими ассоциациями. Без дополнительных подсказок я ничем не могу помочь, кроме этого.

Domagoj 25.03.2018 19:14

если {% for t in teachers %}{{dump(t.subjects.count)}}{% endfor %} сработал, значит данные есть.

Если вы имеете в виду {{teacher.subjects}}, выдает ошибку: Возникло исключение во время рендеринга шаблона («Catchable Fatal Error: объект класса Doctrine \ ORM \ PersistentCollection не может быть преобразован в строку.. Что ж, если вы никогда раньше не видели эту ошибку, внимательно прочтите:

Объект класса Doctrine \ ORM \ PersistentCollection относится к subjects, который как коллекцию не может быть просто вставлен в тег html как строку.

Зависит от того, как вы хотите представить свои данные, но самые основы будут следующими:

{% for t in teachers %}
    <tr>
    {% for s in t.subjects %}
        <td>s.getName</td>
     {% endfor %}
    </tr>
 {% endfor %}

предполагая, что объект subject имеет свойство name и получатель для него. Надеюсь, вы уловили суть.

дай мне знать

Наконец-то работает! Большое спасибо за помощь и уделенное время!

miguelsantos69 26.03.2018 02:03

@ miguelsantos69 в любое время!

Scaramouche 26.03.2018 02:04

Другие вопросы по теме