0
我要向您展示的模式中的每個實體都以這種方式定義:[ENTITY]。 每個實體都用「.idName」標識。像「.idName1.IdName2」這樣的幾個字段創建一個複合鍵,其中至少爲其中之一是外鍵。yaml中的OneToMany的複合外鍵(symfony2)
[Device.deviceId] has [Bookable.deviceId.bookableId]
(.deviceId is a identifies a device)
[Bookable.deviceId.bookableId] has [Booking.deviceId.bookableId.bookingId]
(the tuple .deviceId.bookableId identifies a Bookable)
我已經實現創建[設備]和[可預訂]之間的一對多關係(見代碼)但是當我想使可預訂和之間的另一種一對多的關係訂房它不工作和學說給我一個錯誤。運行後:
php app/console doctrine:schema:update
顯示此錯誤:
[Doctrine\ORM\ORMException]
Column name `deviceId` referenced for relation from SearchDevice\WebBundle\Entity\Booking towards SearchDev
ice\WebBundle\Entity\Bookable does not exist.
完整YAML代碼是下一個: Device.orm.yml文件:
SearchDevice\WebBundle\Entity\Device:
type: entity
id:
deviceId:
type: integer
generator: {strategy: AUTO}
oneToMany:
bookables:
targetEntity: Bookable
mappedBy: device
可預訂的文件:
SearchDevice\WebBundle\Entity\Bookable:
type: entity
id:
deviceId:
associationKey: deviceId
bookableId:
type: integer
generator: {strategy: AUTO}
manyToOne:
device:
targetEntity: Device
inversedBy: bookables
joinColumns:
deviceId:
referencedColumnName: deviceId
oneToMany:
bookings:
targetEntity: Booking
mappedBy: bookable
Boo王文件:
SearchDevice\WebBundle\Entity\Booking:
type: entity
id:
deviceId:
associationKey: deviceId
bookableId:
associationKey: bookableId
bookingId:
type: integer
generator: {strategy: AUTO}
manyToOne:
bookable:
targetEntity: Bookable
inversedBy: bookings
joinColumns:
deviceId:
referencedColumnName: deviceId
bookableId:
referencedColumnName: bookableId
貌似如果問題是出在預定實體,在那裏我說「的DeviceID」是可預訂的實體的列。由於它是一個外鍵列而不是一個明確的列,因此Doctrine在執行這種關係時存在問題。
感謝您的回答。最後,我決定刪除化合物Id並使用更簡單的模型(只有一個id列,如您所說)。這不是對原始問題的解決方案,而是解決方案。這個想法是使用「弱實體」(http://en.wikipedia.org/wiki/Weak_entity),但看起來很難或不可能實現。如果有人知道如何去做,我會很感激。 –