【发布时间】:2013-08-30 13:51:14
【问题描述】:
对不起我的英语,我是使用 CAKEPHP 2.3 的新手
我在使用模型关联时遇到问题,我无法获得“加入数据”(我知道如果模型设置好,cakephp 会自动获得加入数据,显然我做错了)
我的数据库中有 2 个表:
部门(包括以下列)
-id
-名称
-region_id (region_id 是regions(id)的外键)
地区(包含以下列)
-id
-名称
我在 cakePhp 中做了两个模型:
Region.php
<?php
class Region extends AppModel {
var $name = 'Region';
var $actsAs = array( 'Containable' );
public $hasMany = array(
'Departement' => array(
'className' => 'Departement',
'foreignKey' => 'region_id',
'dependent' => false
)
);
}
?>
部门.php
<?php
class Departement extends AppModel {
var $name = 'Departement';
var $actsAs = array( 'Containable' );
public $belongsTo=array(
'Region' => array(
'className' => 'Region',
'foreignKey' => 'region_id',
'dependent' => false
)
);
}
?>
在我需要部门和地区的另一个控制器中,我尝试了很多想法,但在你的想法之后,我需要你的帮助!!!
我做这个: 第一次尝试:
<?php
class SignalementsController extends AppController {
public $helpers = array('Html', 'Form');
var $name = 'Signalements';
var $uses = array('Signalements','Regions','Departements','Communes');
public $recursive = 4;
public function index() {
$departements = $this->Departements->find('all');
$this->set('departements', $departements);
}
}
谁在索引视图中输出:
array(
(int) 0 => array(
'Departements' => array(
'id' => '1',
'name' => 'AIN',
'region_id' => '82'
)
),
(int) 1 => array(
'Departements' => array(
'id' => '10',
'name' => 'AUBE',
'region_id' => '21'
)
)
...
)
但没有自动加入的区域
第二次尝试:我从
更改查找模型$regions = $this->Regions->find('all');
$this->set('regions', $regions);
谁输出:
array(
(int) 0 => array(
'Regions' => array(
'id' => '11',
'name' => 'ILE-DE-FRANCE'
)
), ... );
但没有自动加入的部门
最后一个
$fields=array('Region.id','Region.nom','Departement.id','Departement.nom');
$all= $this->Regions->Departements->find('all',$fields);
/* or all this not working as execpted
$all= $this->Departements->Regions->find('all',$fields);
$all= $this->Departements->find('all',$fields);
$all= $this->Regions->find('all',$fields);
*/
$this->set('all', $all);
我尝试获取每个部门内的区域数据,例如这样
array(
(int) 0 => array(
'Departements' => array(
'id' => '1',
'nom' => 'AIN',
'region' => array( 'id' => '82', 'nom' => 'POITOU-CHARENTES')
)
),
但我只得到这个:
array(
(int) 0 => array(
'Departements' => array(
'id' => '1',
'nom' => 'AIN',
'region_id' => '82'
)
),
如果您有任何想法,请留下 非常感谢
【问题讨论】:
-
您尝试将递归设置为 1 吗?
-
感谢您的帮助。我试过但同样的事情。在 sql 转储中没有连接:SELECT
Departements.id,Departements.nom,Departements.region_idFROMsignalement_albopictus.departementsASDepartements9@SELECT @2 .id,Regions.nomFROMsignalement_albopictus.regionsASRegions -
正如 Ayo 所说,一个问题是 5 的递归性。由于它们依赖于每一个,因此需要大量查询。找到的每个区域都会查询其部门,而部门又会查询其区域......等等。
-
我改公共 $recursive = 1;但同样的事情。
-
您的 ID 字段之一是否是 text/varchar 而不是整数(应该如此)?
标签: cakephp