#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