Ограничение на глубину перехода многие ко многим с помощью CakePHP

#cakephp #cakephp-2.1 #cakephp-2.3 #cakephp-model

#cakephp #cakephp-2.1 #cakephp-2.3 #cakephp-модель

Вопрос:

Существует ли ограничение на глубину выбора all для отношения «многие ко многим»? У меня есть такой дизайн:

В опросе таблиц много разделов опроса таблиц. Разделы опроса таблицы содержат много вопросов. В табличных вопросах есть много табличных возможных ответов.

Если я сделаю это для таблицы опроса:

 $this->loadModel('Survey');
$this->Survey->recursive = 2;
$getSurvey = $this->Survey->find('all');
  

Это дойдет только до таблицы вопросов, но вернет таблицу возможных ответов. Но, если я запрашиваю таблицу разделов опроса, она возвращает все обратно. Это проблема с моим кодом или ограничение глубины поиска?

Вот мои модели:

 <?php
App::uses('AppModel', 'Model');    
class Survey extends AppModel {

    public $validate = array(    
    );

    public $belongsTo = array(    
    );
    public $hasMany = array(
        'surveySection' => array(
            'className' => 'SurveySection',
            'foreignKey' => 'surveys_id',         
        ),
    );

}

<?php
App::uses('AppModel', 'Model');  
class SurveySection extends AppModel {
    public $validate = array(

    );
    public $belongsTo = array(

    );
    public $hasMany = array(
        'Question' => array(
            'className' => 'Question',
            'foreignKey' => 'survey_section_id',
        ),

    );    
}

<?php
App::uses('AppModel', 'Model');    
class Question extends AppModel {
    public $validate = array(

    );
    public $belongsTo = array(

    );
    public $hasMany = array(
        'PossibleResponse' => array(
            'className' => 'PossibleResponse',
            'foreignKey' => 'questions_id',
        ),

    );    
}


<?php
App::uses('AppModel', 'Model');   
class PossibleResponse extends AppModel {
    public $validate = array(

    );
    public $belongsTo = array(

    );
}
  

Комментарии:

1. Что делает ваш код, когда вы пытаетесь $this->Survey->recursive = 3; вместо 2?

2. У меня создалось впечатление, что значения были только равны 2: book.cakephp.org/2.0/en/models/model-attributes.html#recursive но вы правы, изменение его на 3 сработало.

3. Я сам не совсем уверен, почему я не опубликовал это в качестве ответа (сработало ли это?). Я думаю, что в книге CakePHP показан только пример для конкретного случая.

4. Да, это сработало. Опубликуйте это как ответ, и я его одобрю. Спасибо!

Ответ №1:

Вы должны использовать $this->Survey->recursive = 3; .

Как я уже сказал в комментарии, пример в http://book.cakephp.org/2.0/en/models/model-attributes.html#recursive это немного вводит в заблуждение, потому что в нем показан только пример для конкретного случая. На самом деле вы можете зайти так далеко, как захотите, при извлечении данных.