我完成了已经由另一个开发人员实现的symfony2项目的工作,我的问题是继承映射,我有这样的声明:
/**
* @ORM\Entity(repositoryClass="Myapp\MyBundle\Entity\Repository\ProductRepository")
* @ORM\Table(name="product")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="inheritance", type="smallint")
* @ORM\DiscriminatorMap(
* { 0 = "Product",
* 1 = "Hotel", 2 = "Attraction", 3 = "Tour",
* 4 = "Car", "5" = "Transfer"})
*/
abstract class Product
{
....
和转移课程:
/**
* Transfer
*
* @ORM\Table(name="transfer")
* @ORM\Entity(repositoryClass="Myapp\MyBundle\Entity\Repository\TransferRepository")
*/
class Transfer extends Product
{
....
当我在控制器中调用Transfer类时:
$em->getRepository('MyappMyBundle:Transfer')->findAll();
我收到此错误:
Method "name" for object "Myapp\MyBundle\Entity\Hotel" does not exist in MyappMyBundle:Transfer:index.html.twig at line 142
我不知道为什么symfony2坚持打电话给酒店班,即使我打电话给转班?
修改
这里是酒店课程:
/**
* @ORM\Table(name="hotel")
* @ORM\Entity(repositoryClass="Myapp\MyBundle\Entity\Repository\HotelRepository")
*/
class Hotel extends Product
{
index.html.twig
......
{% for t in transfers %}
<td>{{t.name}}</td>
{% endfor %}
我可以添加的唯一一句话,当我在产品类中通过转移类更改酒店课程时,转学班的电话工作正常,关于酒店课他叫转学班吗?
* @ORM\DiscriminatorMap(
* { 0 = "Product",
* 1 = "Transfer", 2 = "Attraction", 3 = "Tour",
* 4 = "Car", "5" = "Hotel"})