Я использовал ArrayCollections в своем последнем проекте, который отлично работал. Теперь в моем новом проекте я пытаюсь реализовать его, и он НЕ работает полностью, хотя я сделал то же самое в обоих проектах.Symfony2/Doctrine - переменная Entity, не возвращающая объект ArrayCollection
Что работает: Я могу добавить новый элемент в ArrayCollection, и когда я распечатать обзор объекта сущности, я получаю, чтобы увидеть элементы, которые я клал в до и после того, как сохраняющийся и смыва , в том же методе.
Что не работает: Когда я пытаюсь получить ArrayCollection от сущности, он ничего не возвращает. Когда я делаю getype ($ collection), я тоже получаю нуль.
Код:
Это код для обоих субъектов. Пользователи - это объект, который содержит ArrayCollection (электронные письма), а электронная почта - это объект, который я хочу добавить в ArrayCollection. Обратите внимание, что несогласованность имени обоих объектов была сделана специально.
Users.cpp (Entity)
<?php
namespace HRPortal\SystemBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Users
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="HRPortal\SystemBundle\Entity\UsersRepository")
*/
class Users
{
// ...
/**
* @var emails[]
*
* $ORM\OneToMany(targetEntity="Email", mappedBy="user", indexBy="id")
*/
private $emails;
/**
* Constructor for the class. Sets createdAt to Now
*
*/
public function __construct()
{
// ...
$this->emails = new ArrayCollection();
}
/**
* Get value for data '$name'
* @param string $name
* @return Type of data '$name'
*/
public function __get($name)
{
return $this->$name;
}
/**
* Set value for data '$name'
* @param string $name
* @param generic $value
* @return Type of data '$name'
*/
public function __set($name, $value)
{
$this->$name = $value;
return $this;
}
public function offsetGet($name)
{
return $this->$name;
}
}
email.php (Entity)
<?php
namespace HRPortal\SystemBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Email
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="HRPortal\SystemBundle\Entity\EmailRepository")
*/
class Email
{
// ...
/**
* @var integer
*
* @ORM\ManyToOne(targetEntity="Users", inversedBy="emails")
*/
private $user;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=255)
*/
private $email;
// ...
}
Часть кода из контроллера
$email = new Email();
$user->password = $bcrypt->hash($user->password);
$user->emails->add($email);
// print_r($user) will show data from $email (Emails Entity)
$email->email = $form->get('email')->getData();
$email->is_default = true;
$email->user = $user;
$em->persist($email);
$em->persist($user);
$em->flush();
// print_r($user) will also show data from $email (of course)
Однако, когда я пытаюсь получить доступ к нему позже:
public function getDefaultEmail($user)
{
// print_r($user) will leave 'emails' empty but print out any other data
// print_r($user->emails) will not show anything
// Getting an error when accessing foreach, as $user->emails is null
foreach ($user->emails as $email) {
if($email->is_default === true){
return $email->email;
}
}
return false;
}
Любые предложения?
Спасибо
'Users.cpp (Entity)' заставляет вас смеяться: D –