1
$order = $this->Order->find('all', array(
        'recursive' => 2,
        'conditions' => array(
            'Order.date' => $datefrom,
        ),
        'joins' => array(
            array(
                'table' => 'purchase',
                'alias' => 'Purchase',
                'conditions'=> array(
                    'Purchase.pid = Order.pid', 
                )
            ),
                array(
                'table' => 'sales',
                'alias' => 'Sales',
                'conditions'=> array(
                    'Purchase.pid = Sales.pid', 
                )
            ),
        ),
    ));

上記のコードで、購入と販売のフィールドが選択されず、注文のフィールドのみが返されるのはなぜですか。すべてのデータが返されるようにするために追加する必要があるものは何ですか。ありがとう

4

4 に答える 4

1

これを試してみてください。「type」キーと「foreignKey」キーが必要かどうかはわかりませんが、通常は「joins」キーを使用するときにそれらを含めます。また、「pid」が正しい外部キーであると想定しています。

$order = $this->Order->find('all', array(
    'recursive' => -1,
    'conditions' => array(
        'Order.date' => $datefrom,
    ),
    'joins' => array(
        array(
            'table' => 'purchase',
            'alias' => 'Purchase',
            'type' => 'INNER',
            'foreignKey' => 'pid',
            'conditions'=> array(
                'Order.pid = Purchase.pid', 
            )
        ),
            array(
            'table' => 'sales',
            'alias' => 'Sales',
            'type' => 'INNER',
            'foreignKey' => 'pid',
            'conditions'=> array(
                'Sales.pid = Purchase.pid', 
            )
        ),
    ),
));

モデルに関係がすでに設定されている場合は、「再帰」キーを -1 に変更します。

于 2012-11-29T12:43:50.680 に答える
0
    Controller::loadModel('User');
    Controller::loadModel('Answer');
    Controller::loadModel('Influence');
    $users = $this->User->find('all', array('joins' => array(
        array(
            'table'      => 'answers',
            'alias'      => 'Answer',
            'type'       => 'inner',
            'foreignKey' => false,
            'conditions' => array('Answer.user_id = User.id'),
        ),
        array(
            'table'      => 'influences',
            'alias'      => 'Influence',
            'type'       => 'inner',
            'foreignKey' => false,
            'conditions' => array(
                'Influence.user_id=Answer.user_id',
            )
        )
    ),'fields' => array(
            'Answer.is_correct',
            'Answer.answer', 
            'Answer.date as answered_date',
            'Influence.signups',
            'Influence.clicks',
            'User.first_name',
            'User.last_name', 
            'User.email', 
            'User.phone', 
            'User.flybuys' )
    ));

他のテーブルからフィールドを取得するには、必要なフィールドを指定する必要があります。

于 2014-06-24T06:01:46.600 に答える
0

まず、 Order Model ファイルで関連付けを作成する必要があります

モデル:

 public $hasMany = array(

    'purchase' => array(

        'className' => 'purchase',

        'foreignKey' => 'pid',

        'dependent' => true,

        'counterQuery' => 'true'

    ),

    'sales' => array(

        'className' => 'sales',

        'foreignKey' => 'pid',

        'dependent' => true,

        'counterQuery' => 'true'
    ),

);

コントローラ:

    $order = $this->Order->find('all', array(

        'recursive' => 2,

        'conditions' => array(

            'Order.date' => $datefrom,

        )

    );

注文、購入、販売に関するレコードを取得できるようになりました。

楽しみ...

于 2014-06-24T10:03:45.367 に答える