Cakephp Can';无法找到与模型关联的模型数据

Cakephp Can';无法找到与模型关联的模型数据,cakephp,recursion,model,relationship,Cakephp,Recursion,Model,Relationship,我是CakePHP新手,我在构建一个要学习的示例时遇到了问题 我正在构建一个包含3个模型的插件(Categoria、Plato、Imagen) 它们之间的关系如下: 范畴-柏拉图(n-n) 柏拉图-伊梅根(1-n) 如果我转到柏拉图视图,我会根据关系得到所有的图像,但是当我通过一个类别访问时,我不能仅仅得到与每个柏拉图相关联的图像。为什么?有什么问题吗 型号代码: 柏拉图: App::uses('AppModel', 'Model'); class Plato extends Erestaura

我是CakePHP新手,我在构建一个要学习的示例时遇到了问题

我正在构建一个包含3个模型的插件(Categoria、Plato、Imagen)

它们之间的关系如下: 范畴-柏拉图(n-n) 柏拉图-伊梅根(1-n)

如果我转到柏拉图视图,我会根据关系得到所有的图像,但是当我通过一个类别访问时,我不能仅仅得到与每个柏拉图相关联的图像。为什么?有什么问题吗

型号代码:

柏拉图:

App::uses('AppModel', 'Model');
class Plato extends ErestaurantAppModel {   
    public $name = 'Plato';
    //public $actsAs = array('Containable');
    public $hasAndBelongsToMany = array(
        'Categoria' => array(
            'className' => 'Categoria',
            'joinTable' => 'categorias_platos',
            'foreignKey' => 'plato_id',
            'associationForeignKey' => 'categoria_id',
            'unique' => 'keepExisting',
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
        )
    );
    public $hasMany = array('Imagen' =>
                            array('foreingkey' => array('plato_id')));
}
类别:

App::uses('AppModel', 'Model');
class Categoria extends ErestaurantAppModel {
    public $name = 'Categoria';
    //public $actsAs = array('Containable');
    public $hasAndBelongsToMany = array(
        'Plato' => array(
            'className' => 'Plato',
            'joinTable' => 'categorias_platos',
            'foreignKey' => 'categoria_id',
            'associationForeignKey' => 'plato_id',
            'unique' => 'keepExisting',
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
        )
    );
}
图像:

App::uses('AppModel', 'Model');
class Imagen extends ErestaurantAppModel {  
    public $name = 'Imagen';
    //public $actsAs = array('Containable');
    public $belongsTo = array('Plato');
}
最后,当我转到Categoria视图时要启动的代码

App::uses('AppController', 'Controller');
class CategoriasController extends ErestaurantAppController {
    public $uses = array('Erestaurant.Categoria');

    public function index() {
        $this->Categoria->recursive = 0;
        $this->set('data', $this->Categoria->find('all'));
    }

    public function view($id = null) {
        if (!$this->Categoria->exists($id)) {
            throw new NotFoundException(__('Registro inválido.'));
        }
        /*
        $this->Categoria->recursive = -1;
        $options = array('conditions' => 
                            array('Categoria.'.$this->Categoria->primaryKey => $id),
                         'contain' => array(
                            'Plato' => array(
                                'Imagen'
                            )
                         )
                        );              
        */
        $this->Categoria->recursive = 2;
        $options = array('conditions' => 
                            array('Categoria.'.$this->Categoria->primaryKey => $id));
        $this->set('item', $this->Categoria->find('first', $options));


    }

}
您看到的注释代码是我尝试的另一种方式,使用Containable,但最后我得到错误“Plato与模型Imagen不关联”

数据库似乎一切正常,每个表都是根据需要创建的(categorias、platos、imagens、categorias_-platos),所有的键都是创建的,并试图保持CakePHP的默认名称


谢谢大家!

要访问深层关系,您必须使用可包含的行为。您的模型中有一个可包含行为的定义,但出于某种原因,它会被注释

public $actsAs = array('Containable');
如果在分类中取消对此行的注释,您可以通过以下方式访问深层关系:

$this->Categoria->find('all', array(
    'contain'=>array(
        'Plato.Imagen'
    )
));

…或者类似的事情。有关更多信息,请访问此链接

我开始使用可容纳行为,但随后收到一条消息,告诉我柏拉图和Imagen模型没有关联:(