2016-07-21 21 views
1

hasMany/belongsToの関係で2つのモデルがリンクされています。ここCakePHP:結合されたテーブルのデータが表示されない

//Table hr_emp_ids. Each employee can have many HR cases. 
public $hasMany = array(
    'HrCase' => array(
     'className' => 'HrCase', 
     'foreignKey' => 'emp_user_id' 
     ) 
    ); 

そしてbelongsToの定義されています:ここでhasManyの定義がある

//Table hr_cases. Each HR case is owned by an employee. 
public $belongsTo = array(
    'HrEmpId' => array(
     'className'=> 'HrEmpId', 
     'foreignKey' => 'emp_user_id' 
    ); 

私のビューのためのコントローラが死んで簡単です:

public function view($id = null) {  
    $this->HrCase->id = $id; 
    if (!$this->HrCase->exists()) { 
     throw new NotFoundException(__('Invalid Case ID')); 
    } 
    $options = array('conditions' => array('HrCase.' . $this->HrCase->primaryKey => $id)); 
    $this->set('case', $this->HrCase->find('first', $options)); 
} 

私がやろうとしているすべてのhr_cases.emp_user_id = hr_emp_ids = emp_user_idに基づいてhr_emp_idsテーブルからhire_dateおよびssnを表示します。

<tr> 
<td><strong>Employee: </strong><br><?php echo h($case['HrCase']['full_name']); ?></td> 
<td><strong>Date of Hire: </strong><br><?php echo h($case['HrEmpId']['hire_date']); ?></td> 
<td><strong>SSN: </strong><br><?php echo h($case['HrEmpId']['ssn']); ?></td> 

表構造:

desc hr_emp_ids; 
+-------------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-------------+-------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| hire_date | date  | YES |  | NULL |    | 
| ssn   | varchar(11) | NO |  | NULL |    | 
| emp_user_id | int(11)  | NO |  | NULL |    | 
+-------------+-------------+------+-----+---------+----------------+ 

desc hr_cases; (truncated) 
+--------------------+-------------+------+-----+---------+----------------+ 
| Field    | Type  | Null | Key | Default | Extra   | 
+--------------------+-------------+------+-----+---------+----------------+ 
| id     | int(11)  | NO | PRI | NULL | auto_increment | 
| emp_user_id  | int(11)  | NO |  | NULL |    | 

HrEmpIdモデルから何も表示されませんここでビューコードです。私はここで何が間違っているのか分かりません。私はこのような団体を数十回も問題なく作りました。私は何が欠けていますか?

答えて

1

関連するデータが表示されない理由はありません。 $optionsで唯一の条件は$idをチェックしているので、それは、getById()を使用することによって単純化することができようにあなたの検索コードは、ここで

$options = array('conditions' => array('HrCase.' . $this->HrCase->primaryKey => $id)); 
$this->set('case', $this->HrCase->find('first', $options)); 

見えます。 Containable BehaviorをHrCaseモデルに追加し、次にgetById()という2番目の引数をtrueに設定する価値があります。これにより、返される関連データを正確に指定できるようになります。

編集:

HrCaseモデルで外部キーemp_user_id$belongsTo関係を設定しているが、これはhr_emp_idsの主キーではありません。 これは関連するデータが返されない理由です。あなたはこのようなものを設定する必要があります。

public $belongsTo = array(
    'HrEmpId' => array(
     'foreignKey' => false, 
     'conditions' => array(
      'HrEmpId.emp_user_id = HrCase.emp_user_id' 
     ), 
    ) 
); 

findByIdを(使用上のこの詳細はHow to associate model in CakePHP by fields not named by convention?

+0

良いアドバイスを参照してください)。また、関連するモデルに包含動作を追加しました。残念なことに、HrEmpIdをデバッグすると、配列は次のようになります:$ options = array($ this-> HrCase-> findById($ id)、 'contains' => array( 'HrEmpId'))空の。まだ困った! – Chris

+0

どのケーキのバージョンを使用していますか? – bill

+0

バージョン2.0.5です。 – Chris

関連する問題