3

これが私の最新の問題です。Cakephpコントローラーでこのクエリを実行します。

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

この SQL ステートメントには 4 つのレコードが必要です。代わりに、コントローラーでデバッグを実行すると、上記の各行で次のようになります (最初のレコードを参照)。

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 で実行すると、配列内で 1 として表示される最初のレコードを含む 4 つのレコードがすべて取得されます (記事の一番上)。

過去 1.5 日間、MySQL が完全なセットをプルアップする理由について運がなかったので、誰かが助けてくれることを心から願っていますが、Cake は最後の 3 つだけを取得し、最初のレコードを "1 "。

前もって感謝します!

4

3 に答える 3

1

@ user996302この問題は、あなたが指摘した私のCake Lighthouseチケットの1つにリモートで接続されているようです.

@GMOAdmin 「更新」という言葉は動詞であるため、モデルの名前に問題がある可能性があると思われます。複数形がないため、 Inflector クラスが翻訳できない可能性があるため、CakePHP の規則を何らかの形で妨げている可能性があります。これ。
正しい名詞は更新で、複数形です:更新. DBテーブル、モデル名とクラス名、コントローラー名とクラス名の名前を(慣例に従って)変更してみて、それが機能するかどうかを確認してください。

次の Inflector メソッドを使用して、Inflector がこれを正しく処理しているかどうかをテストできます。

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

$this->ModelName->query($queryToRun);あなたが言うように、DB上で実行されたときにクエリが正しく実行されるため、これを回避できるこの方法で作業クエリを発行することです。全体として、これは本当に興味深い問題であり、CakeCore チームに確認してもらうことをお勧めします。再現可能であれば、これはバグであり、修正が必要です。

于 2012-07-30T09:44:30.283 に答える
0

非常に奇妙な問題。

何が起こっているのかわかりませんが、最近、あなたの問題によく似たバグレポートを読みました:チケット

作者の提案どおりに試すことができます。param$showHTML(cake docs)をtrueとして配置します。

debug($var, true, true);

お役に立てば幸いです。

于 2012-07-27T00:09:27.203 に答える
0

わかりました、私は答えを見つけたと思います。少なくとも、これは私にとって問題を引き起こしていました。

CakePHP カウンターキャッシュ

私が持っていたもの:

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

非常にばかげていますが、それは問題を引き起こしました。それで、おそらくあなたもカウンターキャッシュを持っていますか? それとも、関係の別のキーを間違って設定したのでしょうか?

私のコード スニペットで問題が見られない場合は、. counterCache$belongsTo代わりに を に追加する必要がありました$hasMany。したがって、次のようになります。

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

注:私は 1.3 ではなく、CakePHP 2.x を実行しています!

于 2013-01-12T22:24:23.543 に答える