Предположим (из-за отсутствия лучшего примера) У меня есть модель Person и другая модель Twin (что означает пару близнецов). Близнецы имеют два внешних ключа Person, скажем first_born_id и second_born_id, ссылающиеся на поля id двух разных людей (в Person). Как настроить отношения в торте?Множественные отношения в CakePHP
Я думаю, номер будет иметь что-то вроде:
$belongsTo = array('FirstBorn' => array('className' => 'Person',
'foreignKey' => 'firstborn_id'),
'SecondBorn' => array('className' => 'Person',
'foreignKey' => 'secondborn_id'));
Но как я должен настроить Person? Я мог бы сделать это нравится:
$hasOne = array('TwinAsFirstborn' => array('className' => 'Twin',
'foreignKey' => 'firstborn_id'),
'TwinAsSecondborn' => array('className' => 'Twin',
'foreignKey' => 'secondborn_id'));
Но тогда, когда у меня есть человек, и я хочу знать о его близнец я должен был бы проверить оба отношения. Наверное, я надеюсь, что есть способ получить отношения «Твин» в Личном, представляющем любой из двух способов, которыми Человек может находиться в двойных отношениях.
Или есть лучший способ установить это?
Возможно, я неправильно понимаю вас, но модель Component представляет собой экземпляр компонента (а не тип компонентов), а компонент может быть частью только одного продукта (также экземпляра, а не класса) либо как компонент1, либо компонент2. Значит, отношения не должны быть? Кроме того, с вашей моделью Component (в основном такой же, как у меня в первом примере, кроме hasOne-> hasMany) проблема остается о том, как получить доступ к Продукту Компонента, не проверяя оба отношения (мне может быть все равно, Компонент является компонентом1 или компонентом2 Продукта). – zephyr
Вы можете заменить Component на ComponentInstance, если хотите. Обратитесь к разделу «Редактирование 2» относительно hasOne: используйте его, прежде всего, при разбиении таблиц. Чтобы получить доступ ко всем Продуктам компонента, см. Редактирование 3. :) – RabidFire
А. Я не знал, что вы можете установить foreignKey в false (это где-то где-то?). Однако, похоже, он рекурсивно нарушает. С рекурсивным значением 2 для компонента я получаю сообщение «Неизвестный столбец: Component.id в WHERE», поскольку компонент отсутствует в отдельных запросах (из рекурсивности) в Product. Для регулярных заявленных отношений foreignKey эти типы запросов получают идентификатор как константу (например, «(3)» вместо «Компонент». «Id»). Можно было сделать что-то вроде вашего метода B, но я надеялся, что есть способ, который лучше интегрируется с остальной частью системы CakePHP. – zephyr