如何理解Doctrine2裡面的mappedBy和inversedBy???
/** @Entity */
class Customer
{
// ...
/** * @OneToOne(targetEntity="Cart", mappedBy="customer") */private $cart;// ...
}
/** @Entity */
class Cart
{
// ...
/** * @OneToOne(targetEntity="Customer", inversedBy="cart") * @JoinColumn(name="customer_id", referencedColumnName="id") */private $customer;// ...
}
回複內容:
如何理解Doctrine2裡面的mappedBy和inversedBy???
/** @Entity */
class Customer
{
// ...
/** * @OneToOne(targetEntity="Cart", mappedBy="customer") */private $cart;// ...
}
/** @Entity */
class Cart
{
// ...
/** * @OneToOne(targetEntity="Customer", inversedBy="cart") * @JoinColumn(name="customer_id", referencedColumnName="id") */private $customer;// ...
}
Doctrine是ORM;
ORM支援改變關聯關係,如將小組的管理員由A變為B;
我們可以定義誰“擁有”這個關聯關係,使關聯就有了“方向”;
從而方便了邏輯和編碼,即ORM只用檢查“擁有”關聯關係的對象上關聯的變化(如小組的管理員現在是A還是B?)。
有inversedBy的,是“擁有”關聯關係的一側。
你貼出的代碼中,
Customer與Cart之間的“誰的購物車”的關聯關係,是由Cart擁有;在Customer對象上,改變其cart變數,通過Doctrine儲存,並不會導致購物車易主。
以上,都是指不寫額外代碼,靠Doctrine自動識別的情形。
Customer 和 Cart 關聯起來
兩邊都可以簡單地調用對方
/** * 從Customer中取得Cart的資料 * * @var Cart $cart */$cart = $customer->getCart();/** * 從Cart中取得Customer的資料 * * @var Customer $customer */$customer = $cart->getCustomer();