CakePHP Recursive не работает с loadModel и этим ->

Кажется, что рекурсия не работает, когда я использую $ this-> loadModel, я хочу сказать, что я кое-что помню о необходимости явно устанавливать в этой ситуации ownTo и hasMany, но это кажется анти-cakephp-auto-magical, я пока чтобы найти какие-либо ответы о том, как использовать

$this->loadModel

а также

$this->...->find('all', array('recursive' => 2));

Любые идеи о том, почему это не работает, с благодарностью.

$this->loadModel('DeployablesJoin');
$deployablesJoins = $this->DeployablesJoin->find('all', array('recursive' => 2));

$this->loadModel('DeployablesComplete');
$deployablesCompletes = $this->DeployablesComplete->find('all', array('recursive' => 2, 'conditions' => array('successful' => array('0', '-1'))));

$this->set('deployablesCompletes', $deployablesCompletes);
$this->set('deployablesJoins', $deployablesJoins);

Изменить: полный код ниже

Моя DeployablesJoin Модель

class DeployablesJoin extends NodeCncAppModel {

public $actsAs = array('Containable');

public $belongsTo = array(
'Deployable' => array(
'className' => 'Deployable',
'foreignKey' => 'deployable_id',
'conditions' => '',
'fields' => 'title,filename,created',
'order' => ''
),
'ServerClass' => array(
'className' => 'ServerClass',
'foreignKey' => 'server_class_id',
'conditions' => '',
'fields' => 'name',
'order' => ''
)
);
}

Соответствующая часть контроллера

    $this->loadModel('DeployablesJoin');
$deployablesJoins = $this->DeployablesJoin->find('all');

print_r($deployablesJoins); die();

Результаты из print_r / die

Array (
[0] => Array (
[DeployablesJoin] => Array (
[id] => 1
[deployable_id] => 5
[server_class_id] => 1
)
)
)

То, что я нашел, что работает, является следующим (соответствующий контроллер части)

$this->loadModel('DeployablesJoin');
$this->DeployablesJoin->belongsTo = array(
'Deployable' => array(
'className' => 'Deployable',
'foreignKey' => 'deployable_id',
'conditions' => '',
'fields' => 'title,filename,created',
'order' => ''
),
'ServerClass' => array(
'className' => 'ServerClass',
'foreignKey' => 'server_class_id',
'conditions' => '',
'fields' => 'name',
'order' => ''
)
);
$deployablesJoins = $this->DeployablesJoin->find('all');

print_r($deployablesJoins); die();

Результаты из print_r / die

Array (
[0] => Array (
[DeployablesJoin] => Array (
[id] => 1
[deployable_id] => 5
[server_class_id] => 1
)
[Deployable] => Array (
[title] => asdf
[filename] => 5_agent.zip
[created] => 2015-01-09 21:31:25
)
[ServerClass] => Array (
[name] => Crawler
)
)

Когда я делаю print_r / die на $ this-> DeployablesJoin, я получаю следующее

AppModel Object
(
[useDbConfig] => default
[useTable] => deployables_joins
[id] =>
...
[table] => deployables_joins
[primaryKey] => id
...
[name] => DeployablesJoin
[alias] => DeployablesJoin
[tableToModel] => Array
(
[deployables_joins] => DeployablesJoin
)

[cacheQueries] =>
[belongsTo] => Array
(
)

0

Решение

Похоже, нет никакой причины, по которой ваш «рекурсивный» не будет работать, кроме неправильно установленных ассоциаций. Я бы предложил проверить это.

Это, как говорится, использование рекурсивного 2 считается плохой практикой. Вместо этого установите рекурсивный -1и используйте удивительное контейнерное поведение CakePHP для получения любой дополнительной информации.

Другим изменением «наилучшей практики» будет размещение ваших находок в модельных методах, а не в контроллерах. Итак, в вашем случае это будет примерно так:

// in the controller
$this->loadModel('DeployablesJoin');
$deployablesJoins =  $this->DeployableJoin->getAll();

//in the DeployablesJoin model
public function getAll() {
$this->recursive = 2; // should change this to containable instead though
return $this->find('all');
}
1

Другие решения

Проблема в том, что модель, которую я пытаюсь загрузить, находится в плагине, и я не указал плагин в loadModel, например, так …

$this->loadModel('NodeCnc.DeployablesJoin');

Я бы поймал это раньше, однако, со следующим, он все еще возвращал результаты

$this->loadModel('DeployablesJoin');

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

1

По вопросам рекламы [email protected]