0

私はドクトリンで真剣な遊びを始めています。

私の現在の課題の中で、アドレスを含むエンティティを構築する必要があります。例を見てみましょう。

class Address {
    private $country;
    private $street;
}

class Person {
    private $name;

    /**
     * @var Address
     */
    private $address;
}

私が達成したいのは、データベースにテーブルを1つだけ持ち、AddressがPersonに埋め込まれていることです。似たようなもの:

create table Person {
     name string(255),
     street string(255),
     country string(255)
}

Hibernate のような ORM でこれが可能であることはわかっています。Doctrine でも同じ動作ができたらいいのにと思います。

Doctrine との 1 対 1 の関係を組み込むにはどうすればよいですか?

4

1 に答える 1

0

残念ながら、Doctrine の ORM は埋め込みオブジェクトをサポートしていません。これまでに見つけた唯一の解決策は、自分でマッピングを行うことです。

class Person {
    ...

    protected $addressName;
    protected $addressStreet;
    protected $addressCountry;

    public function getAddress() {
        return new Address($this->addressName, $this->addressStreet, $this->addressCountry);

        // or Address::create(...) if you wan't to have a simple constructor
    }

    public function setAddress(Address $address) {
        $this->addressName = $address->getName();
        $this->addressStreet = $address->getStreet();
        $this->addressCountry = $address->getCountry();
    }

    ...
}

これは非常に多くの繰り返しコードなので、別のtraitに移動することを考えることができます。

于 2013-08-31T12:07:56.563 に答える