Php 模型不是';t连接
我有4张桌子: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—因为您已经在模
- 向导(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在AppModel中,然后使用Cake的可包含行为。变量$option是选项还是条件?条件。我团队的惯例是在find()上方的变量中放置条件。我认为Cake手册使用“$options”作为变量名,这就是我们得到的变量名。您不需要将该选项数组放入另一个具有关键“条件”的数组中吗?否则它将不起作用,即在定义$options后,添加一个新行:$options=array('conditions'=>$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);