[英]Why symfony doctrine findall() return 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;
}
}
我为电子邮件生成了crud,并且我的电子邮件控制器索引操作显示了电子邮件列表,它具有主义的findall()函数,但是问题是,此findall函数返回ID-> NULL的实体
谁能告诉我为什么它返回null ???
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,
));
}
您有一个基类Service
并在您的Email
类中扩展了该类。 您还在那里重新定义了id
列。 这是不允许的。
您的问题可能与此有关。 有关属性覆盖的更多信息,请参阅Doctrine2文档 。
我建议您从您的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;
}
}
您应该为服务类使用映射的超类。 它的字段将被映射,但是数据库中唯一出现的实体将是电子邮件。
<?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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.