class Mapp{ /** * @var integer $id * * @ORM\Column(name="id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var string $name * * @ORM\Column(name="name", type="string", length=255, nullable=false) */ private $name; /** * @var string $saysay * * @ORM\Column(name="saysay", type="string", length=255, nullable=false) */ private $saysay; /** * @var string $log * * @ORM\Column(name="log", type="text", nullable=false) */ private $log;}class People{ /** * @var integer $id * * @ORM\Column(name="id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var string $name * * @ORM\Column(name="name", type="string", length=255, nullable=false) */ private $name; /** * @var string $discuss * * @ORM\Column(name="discuss", type="string", length=255, nullable=false) */ private $discuss;}
回複內容:
class Mapp{ /** * @var integer $id * * @ORM\Column(name="id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var string $name * * @ORM\Column(name="name", type="string", length=255, nullable=false) */ private $name; /** * @var string $saysay * * @ORM\Column(name="saysay", type="string", length=255, nullable=false) */ private $saysay; /** * @var string $log * * @ORM\Column(name="log", type="text", nullable=false) */ private $log;}class People{ /** * @var integer $id * * @ORM\Column(name="id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var string $name * * @ORM\Column(name="name", type="string", length=255, nullable=false) */ private $name; /** * @var string $discuss * * @ORM\Column(name="discuss", type="string", length=255, nullable=false) */ private $discuss;}
友情提示:Doctrine 2的Mapping資訊(映射資訊)可以用XML,YAML,PHP和註解這四種格式來編寫。
A和B的一對一關聯性,在資料庫裡,可以在A上弄個欄位存相應B記錄的ID,也可以反過來在B上存A的ID,也可以互相存ID,這個是Doctrine 2裡所說的關聯方向。
你問題例子裡的是註解方式的,那我就說註解的:
(1)單向,在A表上產生一個欄位來存B的ID。
/** @Entity **/class A{ // ... /** * @OneToOne(targetEntity="B") * @JoinColumn(name="b_id", referencedColumnName="id") **/ private $b; public function getB() { return $this->b; }}/** @Entity **/class B{ // ...}
在拿到A的情況下,可以用$a->getB()來獲得與$a關聯的B。
joinColumn那一句,大多數情況是可以省略的,Doctrine 2會自動產生關聯欄位的名稱。
(1)雙向
/** @Entity **/class A{ // ... /** * @OneToOne(targetEntity="B", mappedBy="a") **/ private $b; public function getB() { return $this->b; }}/** @Entity **/class B{ // ... /** * @OneToOne(targetEntity="A", inversedBy="b") **/ private $a; public function getA() { return $this->a; }}
$a->getB()和$b->getA(),都可以直接取關聯對象。
targetEntity(關聯哪個對象/表)裡多了一個mappedBy和inversedBy,他們的值,其實就是被關聯對象上用來儲存關聯ID的屬性的名字。
標記了mappedBy的,將成為關聯關係的“擁有者”。