Php 模型不是';t连接

Php 模型不是';t连接,php,mysql,cakephp,cakephp-2.0,cakephp-model,Php,Mysql,Cakephp,Cakephp 2.0,Cakephp Model,我有4张桌子: 向导(id、名称) 页面(id、页码、向导id) 模块(id、名称) 模块页面(id、页面id、模块id、向导id) 模型是烘焙默认值。 向导有一个页面,页面有一个模块。模块是一个连接表。当显示向导中的数组或按页面当前向导id筛选的页面或我传递的页面时,我无法获取模块列表。它只是多次显示模块 页面模型 模块模型 向导模型 控制器 首先在AppModel中设置以下内容: 公共$recursive=-1 你把代码放在哪个控制器里?您不需要使用loadModel—因为您已经在模

我有4张桌子:

  • 向导(id、名称)
  • 页面(id、页码、向导id)
  • 模块(id、名称)
  • 模块页面(id、页面id、模块id、向导id)
模型是烘焙默认值。

向导有一个页面,页面有一个模块。模块是一个连接表。当显示向导中的数组或按页面当前向导id筛选的页面或我传递的页面时,我无法获取模块列表。它只是多次显示模块


页面模型 模块模型 向导模型
控制器
首先在AppModel中设置以下内容: 公共$recursive=-1

你把代码放在哪个控制器里?您不需要使用loadModel—因为您已经在模型文件中将模型连接在一起,所以可以这样访问

// access Module model from within PagesController
$this->Page->Module->find('all', $options);
您的$options设置中也存在错误。条件在一个数组中提供,但它们需要位于另一个称为“条件”的数组中,例如

$options = array(
    'conditions' => array(
        //conditions go here
    )
);
最后,在关闭递归之后,您需要启用可包含的行为。将我刚才给出的$options数组更改如下(此示例将获得所有页面及其向导和模块)


您可以使用其他数组键为查询进一步定义其他选项,例如“order”、“group”、“limit”等。

旁注:如果您没有要设置的值,例如字段、order、limit等,则不要将它们定义为空-这只会使代码混乱(除非您试图覆盖默认值)。不要使用递归。将其设置为
public$recursive=-1$options);
    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);
// access Module model from within PagesController
$this->Page->Module->find('all', $options);
$options = array(
    'conditions' => array(
        //conditions go here
    )
);
$options = array(
    'conditions' => array(
        //conditions go here
    ),
    'contain' => array(
        'Wizard',
        'Module'
    )
);
$data = $this->Page->find('all', $options);