cakephp 2.1包含第二级不同的字段名称

时间:2012-11-21 03:22:13

标签: cakephp-2.1 belongs-to contain

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

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? 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

这是一个非常糟糕的做法,因为CakePHP的想法是:

  

约定优于配置。

这是通过Inflector类来实现的,“接受一个字符串并可以操纵它来处理单词变化,例如复数或驼峰,通常是静态访问”。但是这个仅适用于英文单词。这对您来说意味着您可能缺少数据,因为Cake无法正确构建数据库查询,因为您正在使用西班牙语单词。通过这样做,您正在使用CakePHP的灵活持久层过时 - 您必须手动完成所有配置。最有可能的分页也不会起作用。框架的其他部分也可能无法正常工作: HtmlHelper,FormHelper,Components等......

如果您尝试使用更复杂的模型关联(例如HABTM或“hasMany通过连接模型”),这些问题将会扩展。 所以我不知道为什么你没有看到Horario记录,但我刚才解释的最有可能是你的问题。

你要做的是违反CakePHP的核心原则,如果你重构一下并使用英语单词,你就可以省去很多问题。你的另一个选择是不要使用Cake。