cakephp';包含';左关节不使用为左关节指定的foreignKey

cakephp';包含';左关节不使用为左关节指定的foreignKey,cakephp,join,foreign-key-relationship,contain,Cakephp,Join,Foreign Key Relationship,Contain,在CakePHP2.1上,我有两个表:qca通过两个表上的emp_编号字段属于employee qca模型如下:(请注意外键) 员工模式: public $actsAs = array('Containable'); 在我的控制员的发现中,我使用“包含”从qca表中根据emp_编号检索员工信息 $hoursvalues = $this->Qca->find('all', array('conditions' => $conditions, 'fiel

在CakePHP2.1上,我有两个表:qca通过两个表上的emp_编号字段属于employee

qca模型如下:(请注意外键)

员工模式:

public $actsAs = array('Containable');
在我的控制员的发现中,我使用“包含”从qca表中根据emp_编号检索员工信息

$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`)
鉴于
Employee
id
应该是
Employee
emp\u编号

以下是完整的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`
注意:我还有另一个“contain”实例(默认id为tableName.id的实例)。我想知道belongsTo上的foreignKey('foreignKey'=>'emp_number')是否不适合'contain'工作

你能帮忙吗

非常感谢你

(我找到了一个解决方法,但大大降低了查询的速度(它复制了左连接,需要花费很长时间)


在你找到工作之前试试
$this->Qca->Employee->primaryKey='emp_number'
!它可以工作,非常感谢!我想知道,我怎么会想到这一点。非常感谢。不过,为什么你不只拥有
Qca.Employee_id
?主要原因是员工自动递增id不适合识别员工;所有员工都有id已签名,已存储为emp_编号。qca记录通过emp_编号属于员工。实际上,我正准备写回,因为
$this->qca->Employee->primaryKey='emp_编号';
似乎要花很多时间,而且我的服务器挂断。可能是id是复合的吗?例如,“id1520”我正在考虑试用)删除“id”字母,仅使用数字。b) 使用employee.id作为员工标识符(策略更改)。谢谢。Carloss我是不是应该“颠倒”`$this->Qca->Employee->primaryKey='emp_number';'在发现之后?因为它似乎只是第一次运行良好。
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`
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
    )
),
$joins = array(
 array('table' => 'publication_numerations',
   'alias' => 'PublicationNumeration',
   'type' => 'LEFT',
   'conditions' => array(
      'Publication.id = PublicationNumeration.publication_id',
   )
 )
);

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