Symfony 2.7 Doctrine неправильно монтирует запрос

Я пытаюсь получить классы от учителя во многих отношениях.

$classrooms = $this->getDoctrine()->getManager()->getRepository('AppBundle:Classroom')->findBy(array('teachers' => $teacher));

Но я получаю ошибку. Доктрина не монтирует соединение:

Исключение произошло при выполнении «ВЫБЕРИТЕ t0.id КАК id_1, t0.name КАК имя_2, t0.institution_id КАК организация_id_3 ИЗ класса t0 ГДЕ class_teacher.teacher_id = ?» с параметрами [4]:

SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец «classroom_teacher.teacher_id» в «предложении where»

Но я использую многие ко многим

Класс класса

/**
 * Classroom
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ClassroomRepository")
 */
class Classroom
{
    /**
     * @ORM\ManyToMany(targetEntity="Teacher", cascade={"persist"}, inversedBy="classrooms")
     */
    private $teachers;
    public function __construct()
    {
        $this->teachers         = new ArrayCollection();
    }
}

Учитель класса

/**
 * Teacher
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="AppBundle\Repository\TeacherRepository")
 */
class Teacher implements AdvancedUserInterface, \Serializable
{
    /**
     * @ORM\ManyToMany(targetEntity="Classroom", mappedBy="teachers")
     */
    protected $classrooms;
    public function __construct()
    {
        $this->classrooms           = new ArrayCollection();
    }
}

Что не так?


person Douglas Ianitsky    schedule 28.03.2017    source источник


Ответы (2)


Добавьте этот @ORM\JoinColumn(nullable=false) и выполните :
php app/console doctrine:schema:update --force для обновления, чтобы оно вступило в силу.

 /**
   * Classroom
   *
   * @ORM\Table()
   * @ORM\Entity(repositoryClass="AppBundle\Repository\ClassroomRepository")
   */
   class Classroom{

    /**
     * @ORM\ManyToMany(targetEntity="Teacher", cascade={"persist"}, inversedBy="classrooms")
     * @ORM\JoinColumn(nullable=false)// this line was missing 
     */
    private $teachers;
    public function __construct()
    {
        $this->teachers         = new ArrayCollection();
    }
    }

Удачи

person kourouma_coder    schedule 28.03.2017
comment
Нет. Проблема не в этом =( Я пробую это с миграциями: доктрина приложения/консоли: миграции: diff и ничего. Никаких изменений в вашей информации о сопоставлении не обнаружено. - person Douglas Ianitsky; 29.03.2017

->findBy не работает для отношения «многие ко многим».

Мне нужно было создать функцию в репозитории:

class ClassroomRepository extends \Doctrine\ORM\EntityRepository
{
    public function getTeachers($id)
    {
        $qb = $this->createQueryBuilder('c');
        $qb->join('c.teachers', 'ct')
           ->where($qb->expr()->eq('ct.id', $id));
        return $qb->getQuery()->getResult();
    }
}
person Douglas Ianitsky    schedule 29.03.2017