Глубокая ассоциация, связанная с моделью верхнего уровня? - PullRequest
0 голосов
/ 22 марта 2012

У меня есть следующие модели:

  • Kin, о котором можно думать как о животном - домашнем животном.
  • Species hasAndBelongsToMany Kin
  • GrowthStage hasAndBelongsToMany Species
  • Kin hasAndBelongsToMany GrowthStage
  • и KinGrowthStage, который определяет взаимосвязь между родом и его стадиями роста (он содержит связанные изображения и тому подобное для рода на этой стадии роста).

Так что в моем контроллере я пытаюсь получить следующий массив, чтобы выйти на другой конец. В этом сценарии Species => GrowthStage => KinGrowthStages связаны с идентификатором Kin:

Array
(
    [Kin] => Array
    (
        [id] => 4
        [name] => Hobbes
        [generation] => 1
        [current_growth_stage_id] => 4
        [species_id] => 1
    )
    [Species] => Array
    (
        [id] => 1
        [name] => Tiger
        [GrowthStage] => Array
        (
            [0] => Array
            (
                [id] => 5
                [name] => cub
                [order] => 1
                [KinGrowthStage] => Array
                (
                    [0] => Array
                    (
                        [id] => 1
                        [growth_stage_id] => 1
                        [kin_id] => 4
                        [image] => /img/hobbes/cub.png
                    )
                )
            )
            [1] => Array
            (
                [id] => 2
                [name] => juvenile
                [order] => 2
                [KinGrowthStage] => Array
                (
                    [0] => Array
                    (
                        [id] => 1
                        [growth_stage_id] => 1
                        [kin_id] => 4
                        [image] => /img/hobbes/juvenile.png
                    )
                )
            )
            [2] => Array
            (
                [id] => 9
                [name] => adult
                [order] => 3
                [KinGrowthStage] => Array
                (
                    // Nothing here because Hobbes hasn't reached this growth stage yet
                )
            )
        )
    )
)

То, что я получаю, это. Виды => GrowthStage => KinGrowthStages присоединяется к идентификатору GrowthStage, а не к идентификатору Kin:

Array
(
    [Kin] => Array
    (
        [id] => 4
        [name] => Hobbes
        [generation] => 1
        [current_growth_stage_id] => 4
        [species_id] => 1
    )
    [Species] => Array
    (
        [id] => 1
        [name] => Tiger
        [GrowthStage] => Array
        (
            [0] => Array
            (
                [id] => 5
                [name] => cub
                [order] => 1
                [KinGrowthStage] => Array
                (
                    [0] => Array
                    (
                        [id] => 1
                        [growth_stage_id] => 1
                        [kin_id] => 1
                        [image] => /img/tony/cub.png
                    )
                )
            )
            [1] => Array
            (
                [id] => 2
                [name] => juvenile
                [order] => 2
                [KinGrowthStage] => Array
                (
                    [0] => Array
                    (
                        [id] => 1
                        [growth_stage_id] => 2
                        [kin_id] => 1
                        [image] => /img/tony/juvenile.png
                    )
                )
            )
            [2] => Array
            (
                [id] => 9
                [name] => adult
                [order] => 3
                [KinGrowthStage] => Array
                (
                    [0] => Array
                    (
                        [id] => 1
                        [growth_stage_id] => 3
                        [kin_id] => 1
                        [image] => /img/tony/adult.png
                    )
                )
            )
        )
    )
)

Я понимаю , почему это происходит, я просто хочу знать, есть ли способ изменить отношение "на лету" и присоединить его к идентификатору родственника. Я попытался добавить следующий массив условий к моему массиву:

$this->Kin->contain(
    array(
        'Species' => array(
            'GrowthStage' => array(
                'KinGrowthStage' => array(
                    'conditions' => array('Kin.id = KinGrowthStage.kin_id'),
                ),
                'order' => 'GrowthStage.order ASC'
            )
        )
    )
);

Но я получаю сообщение об ошибке «неизвестная таблица Kin».

1 Ответ

0 голосов
/ 22 марта 2012

Использование связанного поведения https://github.com/Terr/linkable

$this->Kin->find('all', array(
    'link'  => array(
        'Species'  => array(
            'GrowthStage' => array(
                'KinGrowthStage' => array(
                    'conditions'    => 'Kin.id = KinGrowthStage.kin_id', 
                )
            )
        )
    ),
    'order' => 'GrowthStage.order ASC'
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...