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