2012-07-03 2 views
1

Я определил Mapped суперкласс для всех моих объектов с возможностями GeoLocation:Doctrine 2 множественного отображения наследования

<?php 
namespace Acme\GeoBundle\Entity; 

use Gedmo\Mapping\Annotation as Gedmo; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\MappedSuperclass 
*/ 
class Placeable { 

/** 
* @ORM\Column(type="decimal", scale=7) 
*/ 
protected $loc_latitude; 

[...] 

} 
?> 

я в настоящее время сопоставляются два объекта в этом суперкласса. Но я также хочу дать это географическое отображение для моего объекта User, предоставленного FOSUserBundle. Проблема заключается в том, что этот объект уже entends модель пользователя из FOSUserBundle:

<?php 
namespace Acme\UserBundle\Entity; 

use FOS\UserBundle\Entity\User as BaseUser; 

/** 
* @ORM\Entity 
*/ 
class User extends BaseUser {} 
?> 

Так что мой вопрос: как дать информацию о сопоставлении Placeable моему User Entity?

ответ

1

У вас должен быть объект Location/Address, наследующий от Placeable и ссылка Location с пользователем.

PS: Это потому, что вы не можете наследовать от нескольких объектов в PHP

<?php 

class User extends BaseUser 
{ 
    /** 
    * @ORM\OneToOne(targetEntity="Location", inversedBy="user") 
    * @ORM\JoinColumn(name="location_id", referencedColumnName="id") 
    */ 
    private $location; 
} 

class Location extends Placeable 
{ 
    /** 
    * @ORM\OneToOne(targetEntity="User", mappedBy="location") 
    */ 
    private $user; 
} 
+0

Спасибо! Это имеет смысл ;) –

Смежные вопросы