找不到模型关联的模型数据

时间:2014-06-26 08:36:59

标签: cakephp recursion model relationship

我是CakePHP的新手,我在一个可以学习的例子中遇到问题。

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

它们之间的关系如下: 分类 - 柏拉图(n-n) 柏拉图 - Imagen(1-n)

如果我去Plato视图,我会通过这种关系获得所有Imagen,但是当我通过某个类别访问时,我无法访问与每个Plato关联的Imagen。为什么?问题是什么?

模型代码:

柏拉图:

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' => '',
        )
    );
}

IMAGEN:

App::uses('AppModel', 'Model');
class Imagen extends ErestaurantAppModel {  
    public $name = 'Imagen';
    //public $actsAs = array('Containable');
    public $belongsTo = array('Plato');
}

最后,当我进入一个分类视图时,代码我将启动。

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"

无关

数据库似乎一切正常,每个表都根据需要创建(分类,平台,图像,Categias_platos),并创建所有foering键并尝试保留CakePHP默认名称。

谢谢!

1 个答案:

答案 0 :(得分:0)

要访问深层关系,您必须使用可包含的行为。您在模型中有可包含行为的定义,但由于某种原因,它已被评论。

public $actsAs = array('Containable');

Uppon在您的类别中取消注释此行,您可以通过以下方式访问深层关系:

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

......或类似的东西。有关详细信息,请访问此链接Containable Behavior