cakephp发现('所有')没有正确返回

时间:2012-07-26 19:43:22

标签: cakephp cakephp-1.3

所以这是我的最新一期: 我在Cakephp控制器中运行此查询:

$acctRenewLast2Entries = $this->AccountRenew->find
    (
        'all',
        array
        (
            'conditions' => array('Acc_Id' => $plan["Account"]["Acc_Id"]),
            'order' => array('AccR_Id' => 'DESC')
        )
    );

我期待这条SQL语句有4条记录。相反,在我的控制器中运行Debug时,这就是我为上面的每一行获得的内容(参见第一条记录):

app/controllers/admins_controller.php (line 2584)

1

app/controllers/admins_controller.php (line 2584)

Array
(
    [AccountRenew] => Array
        (
            [AccR_Id] => 470
            [AccR_Date] => 2012-06-23 01:21:11
            [AccR_Hstart_Date] => 2012-06-23 01:21:11
            [AccR_Hend_Date] => 2012-08-23 01:21:11
            [AccR_End_Date] => 2013-08-23 01:21:11
            [AccR_Status] => PAID
            [AccR_Reason] => RENEWAL
            [Inv_Id] => 467
            [Inac_Id] => 
            [Acc_Id] => 196
            [AccT_Id] => 44
            [Amount] => 16
            [AccP_Id] => 0
        )

)

app/controllers/admins_controller.php (line 2584)

Array
(
    [AccountRenew] => Array
        (
            [AccR_Id] => 465
            [AccR_Date] => 2012-06-23 01:17:35
            [AccR_Hstart_Date] => 2012-06-23 01:17:35
            [AccR_Hend_Date] => 2012-07-23 01:17:35
            [AccR_End_Date] => 2012-07-23 01:17:35
            [AccR_Status] => PAID
            [AccR_Reason] => RENEWAL
            [Inv_Id] => 462
            [Inac_Id] => 
            [Acc_Id] => 196
            [AccT_Id] => 41
            [Amount] => 16
            [AccP_Id] => 0
        )

)

app/controllers/admins_controller.php (line 2584)

Array
(
    [AccountRenew] => Array
        (
            [AccR_Id] => 269
            [AccR_Date] => 2012-06-06 10:15:56
            [AccR_Hstart_Date] => 2012-06-06 17:15:56
            [AccR_Hend_Date] => 2012-06-20 17:15:56
            [AccR_End_Date] => 2012-06-20 10:15:56
            [AccR_Status] => TRIAL
            [AccR_Reason] => 
            [Inv_Id] => 0
            [Inac_Id] => 
            [Acc_Id] => 196
            [AccT_Id] => 0
            [Amount] => 0
            [AccP_Id] => 0
         )

)

现在,当我运行sql_dump时,我得到以下运行的查询:

SELECT `AccountRenew`.`AccR_Id`, `AccountRenew`.`AccR_Date`, `AccountRenew`.`AccR_Hstart_Date`, `AccountRenew`.`AccR_Hend_Date`, `AccountRenew`.`AccR_End_Date`, `AccountRenew`.`AccR_Status`, `AccountRenew`.`AccR_Reason`, `AccountRenew`.`Inv_Id`, `AccountRenew`.`Inac_Id`, `AccountRenew`.`Acc_Id`, `AccountRenew`.`AccT_Id`, `AccountRenew`.`Amount`, `AccountRenew`.`AccP_Id` FROM `account_renews` AS `AccountRenew` WHERE `Acc_Id` = 196 ORDER BY `AccR_Id` DESC       4   4   

当我在MySQL中运行上述查询时,我确实得到了我的所有4条记录,包括数组中的第一条记录显示为1(在我的写作之上)。

我真诚地希望那里的人可以提供帮助,因为我花了最后1.5天没有任何运气,为什么MySQL拉起整套,但Cake似乎只检索最后3个,并用数组替换第一个记录“1”。

提前致谢!

3 个答案:

答案 0 :(得分:1)

@ user996302此问题似乎与我指出的Cake Lighthouse tickets之一远程连接。

@GMOAdmin我怀疑你的模型名称可能有问题the word "renew" is a verb,因为它没有复数形式,这可能会阻碍CakePHP约定,因为Inflector class可能不是能够翻译这个。
正确的名词是 renewal ,它是复数形式:续约。您可以尝试重命名(according to the convetions)数据库表,模型 - 名称和类名,控制器 - 名称和类名,看看是否有效。

您可以通过以下Inflector方法测试Inflector是否正确处理此问题:

Inflector::pluralize($singular)Inflector::classify($tableName)Inflector::tableize($camelCase)

快速解决方法是使用$this->ModelName->query($queryToRun);发出工作查询,这样您就可以解决这个问题,因为正如您所说,查询在数据库上运行时运行正常。总的来说这是一个真正有趣的问题,我建议你让CakeCore团队看看它 - 如果它是可重复的,那么这是一个BUG,它需要修复。

答案 1 :(得分:0)

非常奇怪的问题。

我不知道发生了什么,但我最近读到了一个错误报告,听起来很像你的问题:ticket

您可以按照作者的建议尝试:将param $ showHTML(cake docs)设为true:

debug($var, true, true);

希望有所帮助。

答案 2 :(得分:0)

好的,我想我找到了答案。至少,这给我带来了问题。

CakePHP counterCache

我有什么:

public $hasMany = array(
    'Flight' => array(
        'className' => 'Flight',
        'foreignKey' => 'user_plane_id',
        'counterCache' => true
     )
);

非常愚蠢,但它确实导致了问题。那么也许你也有一个counterCache?或者你可能在关系中设置了另一个关键错误?

如果您在我的代码段中没有看到问题。我应该将counterCache添加到$belongsTo而不是$hasMany。所以它会是这样的:

public $belongsTo = array(
    'UserPlane' => array(
        'className' => 'UserPlane',
        'foreignKey' => 'user_plane_id',
        'counterCache' => true
    )
);

注意:我正在运行CakePHP 2.x而不是1.3!