2

我为所有具有 GeoLocation 功能的实体定义了一个映射超类:

<?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;

[...]

}
?>

我目前将两个实体映射到这个超类。但是,我还想将此地理映射提供给我的用户实体,由 FOSUserBundle 提供。问题是这个实体已经从 FOSUserBundle 中包含了 User 模型:

<?php
namespace Acme\UserBundle\Entity;

use FOS\UserBundle\Entity\User as BaseUser;

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

所以我的问题是:如何将可放置的映射信息提供给我的用户实体?

4

1 回答 1

1

您应该有一个位置/地址对象,从 Placeable 继承,并将位置与用户链接。

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;
}
于 2012-07-03T12:18:52.880 回答