當我試圖讓這兩個實體我得到這個錯誤之間的一對多單向關聯,當我嘗試更新數據庫模式:主義要求的mappedBy在一對多單向關聯
$應用程序/控制檯學說:架構:更新--dump-SQL
[學說\ ORM \映射\ MappingException]
上字段 '地址' 一對多映射需要 '的mappedBy' 屬性。
/**
* User
*
* @ORM\Table()
* @ORM\Entity
*/
class User
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="Address")
* @ORM\JoinTable(name="users_address",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="address_id", referencedColumnName="id", unique=true)}
* )
*/
private $address;
//...
}
/**
* Address
*
* @ORM\Table()
* @ORM\Entity
*/
class Address
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
// ...
}
如果關聯是單向爲什麼 「的mappedBy」 要求? 在此先感謝。
UPDATE:就像由@tchap一個單向一對多可以用@ManyToMany和連接列上強制執行一對多基數的一個獨特的約束被映射在註釋中。正如文檔所述,但對我來說有點令人困惑,因爲已經有@OneToMay註釋。所以我只需要改變上面的代碼本(僅通過改變@OneToMany到@ManyToMany):
/**
* @ORM\ManyToMany(targetEntity="Address")
* @ORM\JoinTable(name="users_address",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="address_id", referencedColumnName="id", unique=true)}
*)
*/
private $address;
我真的不明白爲什麼你想爲* OneToMany *關聯添加一個* JoinTable *,但我可能會錯過什麼? – tchap
沒有具體的。我只是在學習教義。 – mevqz
然後你可以放棄它我猜。 OneToMany關聯默認也是雙向的,所以你需要'mappedBy'和'inversedBy',參見https://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/association-mapping。 HTML#一個一對多的雙向。你的單向* OneToMany *只是一個* ManyToMany *僞裝 – tchap