对不起我的英语,我是新手使用CAKEPHP 2.3
我在使用模型关联时遇到问题,我无法获得“加入数据”(据我所知,如果模型设置良好,cakephp会自动加入数据,显然我做错了)
我的数据库中有2个表:
部门(以下列)
-id
-name
-region_id(region_id是区域(id)上的外键)
区域(包含以下列)
-id
-name
我在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
)
);
}
?>
Departement.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'
)
),
如果您有任何想法请留下 非常感谢你
答案 0 :(得分:0)
您的ID的类型为varchar,应为int。
此外,这是代码的精简版
<强> Region.php 强>
<?php
class Region extends AppModel {
var $actsAs = array( 'Containable' );
public $hasMany = array( 'Departement' );
}
?>
<强> Departement.php 强>
<?php
class Departement extends AppModel {
var $actsAs = array( 'Containable' );
public $belongsTo=array( 'Region' );
}
?>
<?php
class SignalementsController extends AppController {
public $helpers = array('Html', 'Form');
var $uses = array('Signalements','Regions','Departements','Communes');
public function index() {
$this->Departement->recursive = 1;
$departements = $this->Departements->find('all');
$this->set('departements', $departements);
}
}
<强> index.ctp 强>
<?php print_r($departements); ?>
它给你什么?
答案 1 :(得分:0)
您在模型中使用Containable
行为,因此请尝试使用以下内容进行查找:
$departements = $this->Departement->find('all', array('contain' => 'Region'));
recursive
的最高级别为2,将其设置为4(或1000)的效果为2。