所以这是我的最新一期: 我在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”。
提前致谢!
答案 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)
好的,我想我找到了答案。至少,这给我带来了问题。
我有什么:
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!