CakePHP 2.3模型问题获取数据

时间:2013-08-30 13:51:14

标签: cakephp

对不起我的英语,我是新手使用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'
        )
    ),

如果您有任何想法请留下 非常感谢你

2 个答案:

答案 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。