Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-1180

Indexed Associations: foreign key (association) cannot be used as indexBy field

    Details

    • Type: Improvement Improvement
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.1
    • Fix Version/s: 2.4
    • Component/s: Mapping Drivers
    • Security Level: All
    • Labels:
      None
    • Environment:
      Using Doctrine ORM 2.1.0BETA1

      Description

      I am trying to index a collection by its entity's column which is also a foreign key (association). It seems to me that it is not possible at the moment.

      For example:

      /**
       * @Entity
       */
      class Hotel
      {
      
          // $id column and other stuff
      
          /**
           * @oneToMany(targetEntity="Booking", mappedBy="hotel", indexBy="room")
           * @var Booking[]
           */
          private $bookings;
      }
      
      /**
       * @Entity
       */
      class Booking
      {
          /**
           * @var Hotel
           *
           * @Id 
           * @ManyToOne(targetEntity="Hotel", inversedBy="bookings")
           * @JoinColumns({
           *   @JoinColumn(name="hotel_id", referencedColumnName="id")
           * })
           */
          private $hotel;
      
          /**
           * @var Room
           *
           * @Id
           * @ManyToOne(targetEntity="Room")
           * @JoinColumns({
           *   @JoinColumn(name="room_id", referencedColumnName="id")
           * })
           */
          private $room;
      }
      

      Only possible workaround I found is to define another (plain) entity's property mapped to the same table column and index by it:

      /**
       * @Entity
       */
      class Hotel
      {
      
          // $id column and other stuff
      
          /**
           * @oneToMany(targetEntity="Booking", mappedBy="hotel", indexBy="roomId")
           * @var Booking[]
           */
          private $bookings;
      }
      
      /**
       * @Entity
       */
      class Booking
      {
          // ...
      
          /**
           * @var Room
           *
           * @Id
           * @ManyToOne(targetEntity="Room")
           * @JoinColumns({
           *   @JoinColumn(name="room_id", referencedColumnName="id")
           * })
           */
          private $room;
          
          /**
           * @var integer $roomId
           *
           * @Column(name="room_id", type="integer", nullable=false)
           */
          private $roomId;
      }
      

      Wouldn't it be easy to support it?

        Activity

          People

          • Assignee:
            Benjamin Eberlei
            Reporter:
            Petr Sobotka
          • Votes:
            3 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: