У меня есть следующие:Doctrine 2 один-ко-многим
У пользователя есть одна группа, группа может иметь множество пользователей
Пользователь
<?php namespace Application\Model;
use Doctrine\Common\Collections;
use Doctrine\ORM\Mapping as ORM;
/**
* User model
* Read-only entity
* @ORM\Table(name="VLOGGER_WEBCALENDAR_USR")
* @ORM\Entity
* @package Application\Model
*/
class User
{
/**
* @var int
* @ORM\Id
* @ORM\Column(name="USR_ID", type="integer")
*/
protected $id;
/**
* @var string
* @ORM\Column(name="USR_LOGIN", type="string")
*/
protected $login;
/**
* @var string
* @ORM\Column(name="USR_CODE", type="string")
*/
protected $code;
/**
* @var int
* @ORM\Column(name="GRP_ID", type="integer")
*/
protected $groupId;
/**
* @var string
* @ORM\Column(name="GRP_CODE", type="string")
*/
protected $groupCode;
/**
* @var User\Group
* @ORM\ManyToOne(targetEntity="Application\Model\User\Group",fetch="EAGER")
* @ORM\JoinColumn(name="GRP_ID", referencedColumnName="GRP_ID")
*/
protected $group;
/**
* @var Event
* @ORM\OneToMany(targetEntity="Application\Model\Event", mappedBy="user")
* @ORM\JoinColumn(name="USR_ID", referencedColumnName="USR_ID")
*/
protected $events;
/**
* Constructor
*/
public function __construct()
{
$this->events = new Collections\ArrayCollection();
}
/**
* @return string
*/
public function getCode()
{
return $this->code;
}
/**
* @param string $code
* @return User
*/
public function setCode($code)
{
$this->code = $code;
return $this;
}
/**
* @return Event
*/
public function getEvents()
{
return $this->events;
}
/**
* @param Event $events
* @return User
*/
public function setEvents($events)
{
$this->events = $events;
return $this;
}
/**
* @return User\Group
*/
public function getGroup()
{
return $this->group;
}
/**
* @param User\Group $group
* @return User
*/
public function setGroup($group)
{
$this->group = $group;
return $this;
}
/**
* @return string
*/
public function getGroupCode()
{
return $this->groupCode;
}
/**
* @param string $groupCode
* @return User
*/
public function setGroupCode($groupCode)
{
$this->groupCode = $groupCode;
return $this;
}
/**
* @return int
*/
public function getGroupId()
{
return $this->groupId;
}
/**
* @param int $groupId
* @return User
*/
public function setGroupId($groupId)
{
$this->groupId = $groupId;
return $this;
}
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @param mixed $id
* @return User
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* @return string
*/
public function getLogin()
{
return $this->login;
}
/**
* @param string $login
* @return User
*/
public function setLogin($login)
{
$this->login = $login;
return $this;
}
}
Группа
<?php namespace Application\Model\User;
use Application\Model;
use Doctrine\Common\Collections;
use Doctrine\ORM\Mapping as ORM;
/**
* User group model
* Read-only entity
* @ORM\Table(name="VLOGGER_WEBCALENDAR_GRP")
* @ORM\Entity
* @package Application\Model
*/
class Group
{
/**
* @var int
* @ORM\Id
* @ORM\Column(name="GRP_ID", type="integer")
*/
protected $id;
/**
* @var string
* @ORM\Column(name="GRP_CODE", type="string")
*/
protected $code;
/**
* @var Collections\ArrayCollection
* @ORM\OneToMany(targetEntity="Application\Model\User", mappedBy="group")
* @ORM\JoinColumn(name="GRP_ID", referencedColumnName="GRP_ID")
*/
protected $users;
/**
* Constructor
*/
public function __construct()
{
$this->users = new Collections\ArrayCollection();
}
/**
* @return mixed
*/
public function getCode()
{
return $this->code;
}
/**
* @param mixed $code
* @return Group
*/
public function setCode($code)
{
$this->code = $code;
return $this;
}
/**
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @param int $id
* @return Group
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* @return mixed
*/
public function getUsers()
{
return $this->users;
}
/**
* @param mixed $users
* @return Group
*/
public function setUsers($users)
{
$this->users = $users;
return $this;
}
}
Когда я пытаюсь получить отношение из групп, он отлично работает, но когда я выбираю пользователей и пытаюсь получить их группу, Doctrine создает некоторые прокси-объекты, а результат - пустой объект с заполненным ключом отношений.
Может ли кто-нибудь указать мне хорошее направление?
Вот мой код:
$query = $em->createQueryBuilder()
->select('u')
->from('Application\Model\User', 'u');
$data = $query->getQuery()->getResult();
$data = reset($data);
var_dump($data->getGroup()); // proxy
###########################
$query = $em->createQueryBuilder()
->select('g')
->from('Application\Model\User\Group', 'g');
$data = $query->getQuery()->getResult();
$data = reset($data);
var_dump($data->getUsers()); // ok
Почему у вас есть дополнительный '$ GRP_ID' в классе User? – andy
Дополнительно? У меня есть только один '$ GRP_ID' для сопоставления группы пользователей. – kitensei
. Вы уже указали' GRP_ID' в '$ group' на' @ORM \ JoinColumn (name = "GRP_ID", referencedColumnName = "GRP_ID") '. Что касается прокси-сервера, он автоматически загрузит соответствующий объект по мере необходимости. Например, попробуйте '$ data-> getGroup() -> getCode()'. – andy