0

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

Asistencia 型号:

var $belongsTo = array('Employee');

霍拉里奥型号:

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 记录通过另一个字段链接到员工:emp_appserial

Employee  : emp_appserial         =  373
Horario   : employee_id           =  373

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

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

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

但要让 Employee 包含 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?预先感谢您的任何帮助。

4

1 回答 1

0

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

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

约定优于配置。

这是通过Inflector类实现的,该类“接受一个字符串并可以操纵它来处理诸如复数或骆驼化之类的单词变化,并且通常是静态访问的”。但这仅适用于 英语单词。这对您来说意味着您可能会丢失数据,因为 Cake 无法正确构建数据库查询,因为您使用的是西班牙语单词。通过这样做,您将放弃使用 CakePHP 灵活的持久层——您将不得不手动进行所有配置。也很可能分页将不起作用。框架的其他部分也可能无法正常工作:HtmlHelper、FormHelper、组件等......

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

你试图做的是违背 CakePHP 的核心原则,如果你稍微重构一下并使用英文单词,你会为自己省去很多问题。你的另一个选择是不使用蛋糕。

于 2012-11-22T09:34:07.353 回答