2013-12-10 4 views
0

Я использовал 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; 
} 

Любые предложения?

Спасибо

+0

'Users.cpp (Entity)' заставляет вас смеяться: D –

ответ

0

редактировать:

Ваши электронные письма должным образом зарегистрированы в БД?

Возможно, вы забыли ORM/JoinColumn.


email.php

<?php 
// ... 

/** 
* @var integer 
* 
* @ORM\ManyToOne(targetEntity="Users", inversedBy="emails") 
* @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
*/ 
private $user; 

// ... 
+0

$ email-> электронной почты является строка, содержащая адрес электронной почты :) – nicom974

+0

My плохо -_-», У вас нет комментариев или ошибок PHP? $ email-> email и $ user-> email являются частными атрибутами – SuperBob

+0

Да, все правильно зарегистрировано в БД, и я добавил JoinColumn, а затем сбросил и заново создал схему db после публикации вопроса, но проблема не устранена. Что касается атрибута $ user-> emails, то наличие его как «private» не влияет на результат, который я получаю, так как я обращаюсь к каждой переменной с использованием универсального getter из класса Entity. И нет, нет ошибки, что так всегда:/ – nicom974