2015-10-19 40 views
0

我有服務類:它擴展SERVIC類爲什麼symfony的學說的findAll()的返回ID NULL

<?php 

namespace AppBundle\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Service 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="AppBundle\Entity\ServiceRepository") 
* @ORM\InheritanceType("JOINED") 
* @ORM\DiscriminatorColumn(name="type", type="string") 
* @ORM\DiscriminatorMap({"newsletter" = "Newsletter", "email" = "Email", "service" = "Service"}) 
* 
*/ 
class Service 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="serviceTitle", type="string", length=255) 
    */ 
    private $serviceTitle; 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set serviceTitle 
    * 
    * @param string $serviceTitle 
    * 
    * @return Service 
    */ 
    public function setServiceTitle($serviceTitle) 
    { 
     $this->serviceTitle = $serviceTitle; 

     return $this; 
    } 

    /** 
    * Get serviceTitle 
    * 
    * @return string 
    */ 
    public function getServiceTitle() 
    { 
     return $this->serviceTitle; 
    } 


    /** 
    * @ORM\ManyToOne(targetEntity="Service", inversedBy="children") 
    */ 
    private $parent; 

    /** 
    * @ORM\OneToMany(targetEntity="Service", mappedBy="parent") 
    */ 
    private $children; 
    /** 
    * Constructor 
    */ 
    public function __construct() 
    { 
     $this->children = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    /** 
    * Set parent 
    * 
    * @param \AppBundle\Entity\Service $parent 
    * 
    * @return Service 
    */ 
    public function setParent(\AppBundle\Entity\Service $parent = null) 
    { 
     $this->parent = $parent; 

     return $this; 
    } 

    /** 
    * Get parent 
    * 
    * @return \AppBundle\Entity\Service 
    */ 
    public function getParent() 
    { 
     return $this->parent; 
    } 

    /** 
    * Add child 
    * 
    * @param \AppBundle\Entity\Service $child 
    * 
    * @return Service 
    */ 
    public function addChild(\AppBundle\Entity\Service $child) 
    { 
     $this->children[] = $child; 

     return $this; 
    } 

    /** 
    * Remove child 
    * 
    * @param \AppBundle\Entity\Service $child 
    */ 
    public function removeChild(\AppBundle\Entity\Service $child) 
    { 
     $this->children->removeElement($child); 
    } 

    /** 
    * Get children 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getChildren() 
    { 
     return $this->children; 
    } 
} 

和電子郵件類:

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Email 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="AppBundle\Entity\EmailRepository") 
*/ 
class Email extends Service 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="emailAddress", type="string", length=255) 
    */ 
    private $emailAddress; 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set emailAddress 
    * 
    * @param string $emailAddress 
    * 
    * @return Email 
    */ 
    public function setEmailAddress($emailAddress) 
    { 
     $this->emailAddress = $emailAddress; 

     return $this; 
    } 

    /** 
    * Get emailAddress 
    * 
    * @return string 
    */ 
    public function getEmailAddress() 
    { 
     return $this->emailAddress; 
    } 
} 

我生成電子郵件污物和我的電子郵件控制器索引操作顯示,它有學說的findall()函數,但問題是郵件列表,ID-> NULL

這個函數findAll返回實體任何一個可以告訴我,爲什麼它的返回空???

public function indexAction() 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $entities = $em->getRepository('AppBundle:Email')->findAll(); 


    var_dump($entities); 
    exit(); 
    return $this->render('AppBundle:Email:index.html.twig', array(
     'entities' => $entities, 
    )); 
} 

enter image description here

+1

爲什麼你在你的擴展類再次定義ID? id應該從Service繼承,對吧? – LBA

+0

啊,同時創造實體ID自動創建的,但我忘了在那之後刪除, 現在我刪除其做工精細,現在ID與的FindAll() 感謝的人 – Abid

+0

由於未來 - 你應該接受@Wilt小號回答。 – LBA

回答

2

你有一個基類Service,在你Email類擴展此類。您還在那裏重新定義了id列。這是不允許的。

你的問題可能涉及到這一點。請查詢the Doctrine2 documentation on attribute override瞭解更多信息。

我建議你從你的Email實體完全刪除ID列:

<?php 
namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Email 
* 
* @ORM\Entity(repositoryClass="AppBundle\Entity\EmailRepository") 
*/ 
class Email extends Service 
{ 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="emailAddress", type="string", length=255) 
    */ 
    private $emailAddress; 

    /** 
    * Set emailAddress 
    * 
    * @param string $emailAddress 
    * 
    * @return Email 
    */ 
    public function setEmailAddress($emailAddress) 
    { 
     $this->emailAddress = $emailAddress; 

     return $this; 
    } 

    /** 
    * Get emailAddress 
    * 
    * @return string 
    */ 
    public function getEmailAddress() 
    { 
     return $this->emailAddress; 
    } 
} 
-1

您應該使用mapped superclass類服務。 其字段將被映射,但數據庫中出現的唯一實體將是電子郵件。

<?php 
/** @MappedSuperclass */ 
class Service 
{ 
    /** @Column(type="string") */ 
    protected $serviceTitle; 

    // ... more fields and methods 
} 

/** @Entity */ 
class Email extends Service 
{ 
    /** @Id @Column(type="integer") */ 
    private $id; 
    /** @Column(type="string") */ 
    private $emailAddress; 

    // ... more fields and methods 
} 
+0

答案中有一個錯字,但它已被修復,我認爲它現在有效。 – Roubi