cakephp';包含';左关节不使用为左关节指定的foreignKey
在CakePHP2.1上,我有两个表:qca通过两个表上的emp_编号字段属于employee qca模型如下:(请注意外键) 员工模式: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
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));