【问题标题】:CakePHP 2.3 Model probleme getting dataCakePHP 2.3 模型问题获取数据
【发布时间】: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_id FROM signalement_albopictus.departements AS Departements9@SELECT @2 .id, Regions.nom FROM signalement_albopictus.regions AS Regions
  • 正如 Ayo 所说,一个问题是 5 的递归性。由于它们依赖于每一个,因此需要大量查询。找到的每个区域都会查询其部门,而部门又会查询其区域......等等。
  • 我改公共 $recursive = 1;但同样的事情。
  • 您的 ID 字段之一是否是 text/varchar 而不是整数(应该如此)?

标签: cakephp


【解决方案1】:

您在模型中使用Containable 行为,因此请尝试使用以下命令查找:

$departements = $this->Departement->find('all', array('contain' => 'Region'));

同样recursive 的最大级别为 2,将其设置为 4(或 1000)具有 2 的效果。

【讨论】:

  • 谢谢,但尝试后我仍然卡住:(int) 0 =&gt; array( 'Departements' =&gt; array( 'id' =&gt; '1', 'nom' =&gt; 'AIN', 'region_id' =&gt; '82' ) ),
  • $mysql = $this->Departements->query("SELECT departements.nom,regions.nom FROM departements,regions WHERE departementsregion_id = regions.id 订购 departements.id");我试试这个和这个工作,我会一直使用它,直到找到解决方案
  • 您的模型必须是单数,您的表格必须是复数。 $this-&gt;Departements(注意,复数)首先是如何工作的?它必须是$this-&gt;Departement
  • 是的,你是莱特。我正在工作而没有输出错误。我更改为单名模型,我最终加入!
  • 是的,你是莱特。它在没有输出错误的情况下工作(并且没有异常结果)我更改为单数名称模型,我最终得到了加入!
【解决方案2】:

您的 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); ?>

它给了你什么?

【讨论】:

  • 我修改了我的数据库,使其所有 id 都在 INT(11) 中。但不幸的是array( (int) 0 =&gt; array( 'Departements' =&gt; array( 'id' =&gt; '1', 'nom' =&gt; 'AIN', 'region_id' =&gt; '82' ) ),
  • 在 DB 中,区域和部门之间是“非识别关系”。
  • 正如另一个答案已经说过的那样,我没有看到您使用复数来查询模型。它必须是单数 :S Post 已编辑。
猜你喜欢
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 2021-11-01
相关资源
最近更新 更多