我有4张桌子:
向导(ID,名称)
页面(id,page_number,wizard_id)
模块(ID,名称)
modules_pages(id,page_id,module_id,wizard_id)
这些模型是默认设置。
向导具有页面,页面具有模块。 modules_pages是一个联结表。当我显示由向导或由页面当前的wizard_id或我通过的页面过滤的页面中的数组时,无法获得模块列表。它只是多次显示模块。
页面模型
public $belongsTo = array(
'Wizard' => array(
'className' => 'Wizard',
'foreignKey' => 'wizard_id',
),
);
public $hasAndBelongsToMany = array(
'Module' => array(
'className' => 'Module',
'joinTable' => 'modules_pages',
'foreignKey' => 'page_id',
'associationForeignKey' => 'module_id',
'unique' => 'keepExisting',
)
);
模块型号
public $hasAndBelongsToMany = array(
'Page' => array(
'className' => 'Page',
'joinTable' => 'modules_pages',
'foreignKey' => 'module_id',
'associationForeignKey' => 'page_id',
'unique' => 'keepExisting',
),
);
public $hasOne = array(
'CodeReference' => array(
'className' => 'CodeReference',
'foreignKey' => 'code_reference_id',
),
);
向导模型
public $hasMany = array(
'Page' => array(
'className' => 'Page',
'foreignKey' => 'wizard_id',
'dependent' => false,
'conditions' => 'ModulesPage.wizard_id = Wizard.id',
)
);
控制器
$this->loadModel('Page');
$this->Page->recursive = 1;
$options = array('Page.wizard_id' => $wizard_id);
$page = $this->Page->find('first', $options);
$this->set('page');
$this->loadModel('ModulesPage');
$this->ModulesPage->recursive = 2;
$options = array('ModulesPage.wizard_id ' => $wizard_id,
'ModulesPage.page_number' => $page_number,
'ModulesPage.enabled' => 1);
$modules = $this->ModulesPage->find('all', $options);
最佳答案
首先在AppModel中设置以下内容:
公共$递归= -1;
您要在哪个控制器中放入该代码?您不需要使用loadModel-因为您已经将模型连接到了模型文件中,所以您可以像这样访问。
// access Module model from within PagesController
$this->Page->Module->find('all', $options);
$ options设置中也存在错误。条件是在数组中提供的,但它们必须位于另一个称为“条件”的数组中,例如
$options = array(
'conditions' => array(
//conditions go here
)
);
最后,关闭递归后,您需要启用可包含的行为。更改我上面刚刚给出的$ options数组,如下所示(此示例将获取所有页面及其向导和模块)
$options = array(
'conditions' => array(
//conditions go here
),
'contain' => array(
'Wizard',
'Module'
)
);
$data = $this->Page->find('all', $options);
您可以使用其他阵列键进一步定义查询的其他选项,例如'order','group','limit'等。
关于php - 模特没有加入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24441292/