3

問題:

ディーラーとテストドライブの 2 つのモデルがあります (テストドライブは、dealer_id を通じてディーラーに属します)。ディーラーに関するリアルタイムの統計を表示したい: 合計 (Testdrive.active = 1)、処理済み (Testdrive.active = 1 && Testdrive.processed = 1) ...

私は約 100 のディーラーと 10000 のテストドライブを持っています。カウント ベースの SQL には約 10 秒かかります (非効率的)。現在、1 時間ごとに実行される cronjob がありますが、リアルタイムの統計情報はありません。

私はこのようなことを試しました:

var $belongsTo = array(
    'Dealer' => array(
        'className' => 'Dealer',
        'foreignKey' => 'dealer_id',
        'counterCache' => 'active',
        'counterScope' => array('Testdrive.active' => 1),
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Dealer' => array(
        'className' => 'Dealer',
        'foreignKey' => 'dealer_id',
        'counterCache' => 'processed',
        'counterScope' => array('Testdrive.active' => 1, 'Testdrive.processed' => 1),
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

...しかし、belongsTo => 'Dealear' 値を上書きしました。

counterScope の配列を持つ counterCache の配列を持つことはできますか?

 var $belongsTo = array(
    'Dealer' => array(
        'className' => 'Dealer',
        'foreignKey' => 'dealer_id',
        'counterCache' => array('active', 'processed'),
        'counterScope' => array('active' => array('Testdrive.active' => 1), 'processed' => array('Testdrive.active' => 1, 'Testdrive.processed' => 1)),
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
);
4

1 に答える 1

1

(現在)ドキュメントにこの例があります。次のような質問の例に適用されます。

class TestDrive extends AppModel {

    public $belongsTo = array(
        'Dealer' => array(
            'counterCache' => array(
                'active' => array(
                    'TestDrive.active' => 1
                ),
                'processed' => array(
                    'TestDrive.active' => 1, 
                    'TestDrive.processed' => 1
                )
            )
        )
    );
}

classNameデフォルト値(など)でキーを定義する必要はないことに注意してくださいforeignKey

于 2013-03-13T20:05:02.817 に答える