我无法从第二级获取包含使用不同字段名称作为链接的值。
Asistencia模型:
var $belongsTo = array('Employee');
Horario模型:
var $belongsTo = array('Employee');
员工模式:
var $hasMany = array(
'Horario' => array(
'foreignKey' => 'employee_id',
'dependent' => true
),
'Asistencia' => array(
'foreignKey' => 'employee_id',
'dependent' => true
)
);
我将解释在我的示例记录中使用这些值:
Asistencia: employee_id = 3701
Employee : id = 3701
在Asistencia的find()中,我通过切换Employee primaryKey来包含Employee就好了:
$this->Asistencia->Employee->primaryKey = 'id';
$this->paginate = array(
'contain' => array(
'Employee' => array(
'foreignKey' => 'employee_id',
//'fields' => array('id', h('emp_ape_pat'), h('emp_ape_mat'), h('name')),
'Horario' => array(
'foreignKey' => 'employee_id',
//'fields' => array('id' )
))
),
'conditions' => $conditions,
'order' => 'Asistencia.employee_id');
但是,我的Horario记录通过另一个字段链接到Employees:emp_appserial
Employee : emp_appserial = 373
Horario : employee_id = 373
我的Employee数组如何包含Horario数组? (他们确实分享了刚刚提到的价值)。
目前,Horario包含的是使用Asistencia.employee_id和Employee.id(3701)上的值。 (检查了sql_dump并试图通过
获取Horario"WHERE `Horario`.`employee_id` = (3701)"
但是对于包含Horario的员工,它应该使用Employee.emp_appserial和Horario.employee_id(373)上的值。
这就是我得到的(底部的空数组)
array(
(int) 0 => array(
'Asistencia' => array(
'id' => '5',
'name' => null,
'employee_id' => '3701',
'as_date' => '2012-11-19',
),
'Employee' => array(
'id' => '3701',
'emp_appserial' => '373',
'emp_appstatus' => '8',
'AgentFullName' => '3701 PEREZ LOMELI JORGE LORENZO',
'FullNameNoId' => 'PEREZ LOMELI JORGE LORENZO',
'Horario' => array()
)))
请注意:
'employee_id' => '3701', (Asistencia)
和
'emp_appserial' => '373', (Employee)
我的Horario有'employee_id'= 373。
我怎样才能进行切换,以便关系Employee< - > Horario基于emp_appserial? 提前感谢您的帮助。
答案 0 :(得分:0)
首先,您可能会遇到问题,因为您的模型名称使用西班牙语单词,我怀疑您也将它们用于控制器。
这是一个非常糟糕的做法,因为CakePHP的想法是:
约定优于配置。
这是通过Inflector类来实现的,“接受一个字符串并可以操纵它来处理单词变化,例如复数或驼峰,通常是静态访问”。但是这个仅适用于英文单词。这对您来说意味着您可能缺少数据,因为Cake无法正确构建数据库查询,因为您正在使用西班牙语单词。通过这样做,您正在使用CakePHP的灵活持久层过时 - 您必须手动完成所有配置。最有可能的分页也不会起作用。框架的其他部分也可能无法正常工作: HtmlHelper,FormHelper,Components等......
如果您尝试使用更复杂的模型关联(例如HABTM或“hasMany通过连接模型”),这些问题将会扩展。
所以我不知道为什么你没有看到Horario
记录,但我刚才解释的最有可能是你的问题。
你要做的是违反CakePHP的核心原则,如果你重构一下并使用英语单词,你就可以省去很多问题。你的另一个选择是不要使用Cake。