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;

[...]

}
?>

現在、2つのエンティティをこのスーパークラスにマッピングしています。ただし、FOSUserBundleによって提供されるユーザーエンティティにもこのジオマッピングを提供したいと思います。問題は、このエンティティがすでにFOSUserBundleからユーザーモデルをエンテンドしていることです。

<?php
namespace Acme\UserBundle\Entity;

use FOS\UserBundle\Entity\User as BaseUser;

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

だから私の質問は:Placeableから私のユーザーエンティティにマッピング情報を与える方法は?

4

1 に答える 1

1

おそらく、Placeable から継承した Location/Address オブジェクトが必要であり、Location と User をリンクする必要があります。

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 に答える