剛開始學symfony2架構,哪位師兄能指教一下一對多映射怎麼做嗎?有命令產生不?

來源:互聯網
上載者:User
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的,將成為關聯關係的“擁有者”。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.