Возможно ли представлять составные первичные ключи в CakePHP?

#mysql #cakephp

#mysql #cakephp

Вопрос:

У меня есть структура таблицы следующим образом

  --------------    ------------    --------------    ----------------- 
| ships        |  | ship_types |  | ship_slots   |  | ship_components |
 --------------    ------------    --------------    ----------------- 
| id           |  | id         |  | id           |  | ship_id         |
| user_id      |   ------------   | ship_type_id |  | ship_slot_id    |
| ship_type_id |                   --------------    ----------------- 
 --------------   

ship_types hasMany ships
ship_types hasMany ship_slots
ships hasMany ship_components
ship_slots hasMany ship_components
  

Когда я делаю что-то вроде

 ship->find(all, user_id = xyz)
  

Я получаю

 [0] =>
    Ship =>
        id 1
    ShipType =>
        ShipSlot =>
            [0] =>
                ShipComponent =>
                    [0] => ship_id 1
                    [1] => ship_id 2
            [1] => ...
[1] =>
    Ship =>
        id 2
    ShipType =>
        ShipSlot =>
            [0] =>
                ShipComponent =>
                    [0] => ship_id 1
                    [1] => ship_id 2
            [1] => ...
  

Какой идентификатор хотелось бы иметь

 (ships   ship_slots) hasOne ship_components
  

Ship_id и ship_slot_id образуют первичный ключ для компонентов корабля. Как мне настроить ассоциации моделей, чтобы ship_slots связывались только с ship_components, которые имеют ship_id родительского корабля.

 select *
from ships
inner join ship_types on ship_types.id = ships.ship_type_id
left join ship_slots on ship_slots.ship_type_id = ship_types.id
left join ship_components on ship_components.ship_id = ships.id and ship_components.ship_slot_id = ship_slots.id
where ships.user_id = 5