#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 это немного вводит в заблуждение, потому что в нем показан только пример для конкретного случая. На самом деле вы можете зайти так далеко, как захотите, при извлечении данных.