2012-11-21 54 views
0

我无法从第二级获取包含使用不同字段名称作为链接的值。cakephp 2.1包含第二级别不同的字段名称

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()方法,我得到通过切换员工的PrimaryKey蛮好包含员工:

$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记录经由另一场连接到员工:emp_appserial

Employee : emp_appserial   = 373 
Horario : employee_id   = 373 

我的Employee数组如何包含Horario数组? (他们确实分享刚刚提到的价值)。

目前,Horario包含使用Asistencia.employee_id和Employee.id(3701)上的值。 (检查sql_dump,并试图通过

"WHERE `Horario`.`employee_id` = (3701)" 

得到Horario但对于员工含有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

我怎么可能让开关,关系员工< - > Horario基于emp_appserial? 非常感谢您的帮助。

+0

作为一种解决方法,我将使Horario.employee id与employee.id匹配,并使用新字段:Horario.emp_appserial作为此其他标识符(示例中的值为373)。然而,这种现场使用的变化需要进行重构 - 我只希望不会太多:-)尽管如此,这仍然会让事情变得简单。 –

回答

0

首先,您可能会遇到问题,因为您使用西班牙语单词作为您的模型名称,我怀疑您也将它们用于控制器。

这是一个非常不好的做法,因为CakePHP的想法是:

约定优于配置。

这是通过Inflector类“需要一个字符串,并且可以操纵它来处理字变体如复数形式的或骆驼源化,且通常静态访问”来实现的。但是这个只适用于英文单词。这对您意味着您可能会错过数据,因为Cake无法正确建立数据库查询,因为您使用的是西班牙语单词。通过这样做,您可以使CakePHP的灵活持久层过时 - 您将不得不手动完成所有配置。也最有可能分页不起作用。该框架的其他部分也可能无法正常工作: 的HtmlHelper,表单助手,部件等......如果你尝试使用更复杂的模型协会,如HABTM或“通过加入型号的hasMany

这些问题将扩大”。 所以我不知道你为什么没有看到Horario记录,但我刚刚解释的最有可能是你的问题。

你想要做的是违背CakePHP的核心原则,如果你重构一下并使用英文单词,你会为自己节省很多问题。你的其他选择是不使用Cake。

+0

谢谢。对于西班牙语的名字模型,只要我坚持单数,复数,camelcase等,cakephp已经表现得很好,并提供了所有的魔力.-我没有在那里看到任何问题。对于我的发现问题,切换员工模型主键对我很有帮助;只是在这个例子中,我的find包含需要使用“常规”主键(而不是开关)来获取我的horario。我所做的是重构horario表包含employee.id和employee.app_serial,所以包含(employee-horario)基于与asistencia-> employee相同的pk。 –

相关问题