2012-11-21 55 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。 –

相關問題