1

Cakephp 2.1 では、2 つのテーブルがあります。qca は、両方のテーブルのフィールド emp_number を介して従業員に属しています。

qca モデルの属している : (foreignKey に注意してください)

public $actsAs = array('Containable');

var $belongsTo = array('Dir', 
     'Employee' => array(
     'className' => 'Employee',
     'foreignKey' => 'emp_number')
 );

従業員モデル:

public $actsAs = array('Containable');

コントローラーの検索で、「含む」を使用して、qca テーブルから emp_number に基づいて従業員情報を取得します。

$hoursvalues = $this->Qca->find('all', array('conditions' => $conditions, 
            'fields' => array('Qca.emp_number', 'Sum(CASE WHEN Qca.qca_tipcode = 1 THEN 1 END) AS Qca__comps', 'Sum(qca_end - qca_start) as Qca__production', 'Sum(Qca.qca_durend) as Qca__idle'),
            'contain' => array(
                'Employee' => array(
                    'fields' => array('emp_number', 'emp_ape_pat', 'emp_ape_mat', 'emp_ape_mat'))),
            'group' => array('Qca.emp_number'),
                ));

ただし、実行された sql 文は次のように表示されます。

LEFT JOIN `devopm`.`employees` AS `Employee` ON (`Qca`.`emp_number` = `Employee`.`id`)

一方 Employeeidする必要がありますEmployeeemp_number

これは完全な sql 文です。

SELECT `Qca`.`emp_number`, Sum(CASE WHEN Qca.qca_tipcode = 1 THEN 1 END) AS Qca__comps, Sum(qca_end - qca_start) as Qca__production, Sum(`Qca`.`qca_durend`) as Qca__idle, `Employee`.`emp_number`, `Employee`.`emp_ape_pat`, `Employee`.`emp_ape_mat`, `Employee`.`id` FROM `devopm`.`qcas` AS `Qca` LEFT JOIN `devopm`.`employees` AS `Employee` ON (`Qca`.`emp_number` = `Employee`.`id`) WHERE `Qca`.`dir_id` = 63 AND FROM_UNIXTIME(`Qca`.`qca_start`, '%Y-%m-%d') >= '2012-07-18' AND FROM_UNIXTIME(`Qca`.`qca_start`, '%Y-%m-%d') <= '2012-07-18' GROUP BY `Qca`.`emp_number`

これにより、Employee に対して null 値が返されます。

array(
(int) 0 => array(
    'Qca' => array(
        'emp_number' => 'id3108',
        'comps' => '2',
        'production' => '7784',
        'idle' => '529'
    ),
    'Employee' => array(
        'emp_ape_pat' => null,
        'emp_ape_mat' => null,
        'id' => null
    )
),

注:「含む」の他のインスタンスが機能しています(デフォルトのID = tableName.idのインスタンス)。belongsTo ('foreignKey' => 'emp_number') のforeignKey が 'contain' の動作に適していないのだろうか?

手伝ってくれますか?

どうもありがとう。

(回避策を見つけましたが、クエリが大幅に遅くなります(左結合が複製され、永遠にかかります)

$joins = array(
 array('table' => 'publication_numerations',
   'alias' => 'PublicationNumeration',
   'type' => 'LEFT',
   'conditions' => array(
      'Publication.id = PublicationNumeration.publication_id',
   )
 )
);

$this->Publication->find('all', array('joins' => $joins));
4

0 に答える 0