У меня есть объект User
с самореферентным отношением "один ко многим" - каждый User
владеет набором студентов (которые также являются пользователями):
<?php
namespace AppBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\Common\Collections\ArrayCollection;
/**
* User
*/
class User extends BaseUser
{
/**
* @var int
*/
protected $id;
private $students;
// ....
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
public function __construct() {
$this->students = new ArrayCollection();
// ...
parent::__construct();
}
/**
* Remove student
*
* @return User
*/
public function removeStudent($student)
{
$this->students->removeElement($student);
return $this;
}
/**
* Add a student
*
* @param User $students
*
* @return User
*/
public function addStudent($student)
{
$this->students->add($student);
return $this;
}
/**
* Get students
*
* @return User
*/
public function getStudents()
{
$this->students;
}
/**
* Set students
*
* @param User $students
*
* @return User
*/
public function setStudents($students)
{
$this->students = $students;
return $this;
}
// ....
}
Сопоставление выполняется как однонаправленный режим "один ко многим" с присоединяемой таблицей
AppBundle\Entity\User:
type: entity
table: null
repositoryClass: AppBundle\Repository\UserRepository
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
// ...
manyToMany:
students:
targetEntity: User
joinTable:
name: mentors_students
joinColumns:
mentor_id:
referencedColumnName: id
inverseJoinColumns:
student_id:
referencedColumnName: id
unique: true
lifecycleCallbacks: { }
Теперь, когда я добавляю/редактирую пользователя с помощью пакета EasyAdmin, я могу добавить учеников для этого пользователя. Однако, когда я извлекаю сущность, свойство student всегда имеет значение null. Например, когда я просматриваю список пользователей:
Здесь предполагается, что пользователь «sagarl3232» является учеником «sj», но представление выше ясно показывает, что свойство, когда оно получено, имеет значение null.
Сущность правильно сохраняется в базе данных. То есть таблица соединения имеет правильные значения:
Почему Doctrine делает это со мной? Разве это не должно автоматически гидратировать массив студентов?
SELECT ..., u0_.mentor_id AS mentor_id_17 FROM user u0_ WHERE u0_.id IN (?) ORDER BY u0_.id DESC Parameters: [ 0 => [ 0 => 8, 1 => 7, 2 => 6, 3 => 5, 4 => 1 ] ]
- person Sagar Limaye   schedule 22.07.2017$user->getStudents()
. - person Sagar Limaye   schedule 22.07.2017