торт php содержит внутри

Я использую CakePHP для своего проекта... Чтобы ускорить мой код, я хочу получить только некоторые типы моделей, которые связаны с моим реальным объектом:

$result = $this->Category->find(
                'first',
                array(
                    'conditions' => array(
                        'Category.folder' => $path[0]
                    ),
                    'contain' => array('Rubric',
                        'conditions' => array('Rubric.category_id' => 'Category.id'),
                        'contain' => array('Subrubric',
                            'conditions' => array('Subrubric.rubric_id' => 'Rubric.id')
                        )
                    )
                )
            );

path[0] - это параметр из URL-адреса...

Категория и рубрики найдены, а подрубрики нет. Есть также записи, связанные с моим объектом, но я хочу, чтобы они были в моем представлении рубрики, а не в представлении категории.

Модель отношений:

Категория:

public $hasMany = array(
        'Rubric' => array(
            'className' => 'Rubric',
            'foreignKey' => 'category_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => 'title',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );

Рубрика:

public $hasMany = array(
    'Entrieslocation' => array(
        'className' => 'Entrieslocation',
        'foreignKey' => 'rubric_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    ),
    'Subrubric' => array(
        'className' => 'Subrubric',
        'foreignKey' => 'rubric_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    )
);

Здесь я не хочу Entrylocations...


person Marcel C    schedule 23.01.2013    source источник


Ответы (2)


Смотрите это: Содержит более глубокие ассоциации

Вы не должны использовать node 'contain' в более глубоких отношениях. Ваш код должен выглядеть так.

 $result = $this->Category->find(
            'first',
            array(
                'conditions' => array(
                    'Category.folder' => $path[0]
                ),
                'contain' => array('Rubric',
                    'conditions' => array('Rubric.category_id' => 'Category.id'),
                    'Subrubric' => array(
                        'conditions' => array('Subrubric.rubric_id' => 'Rubric.id')
                    )
                )
            )
        );
person Nik Chankov    schedule 23.01.2013

вы также можете использовать еще один вариант.

$this->ModelName->unbindModel(array
(
    'hasMany' => array
    (
        'OtherModel'
    )
));

$this->ModelName->bindModel(array
(
    'belongsTo' => array
    (
        'SomeOtherModel' => array
        (
            'foreignKey' => false,
            'conditions' => array
            (
                'ModelName.id = SomeOtherModel.foreignKey'
            )
        )
    )
));
person Dipesh Parmar    schedule 24.01.2013
comment
слишком много альтернатив :). Я всегда ненавидел связывать и отвязывать функции модели. - person Nik Chankov; 29.01.2013