2016-07-21 5 views
1

Ich habe zwei Modelle in einer hasMany/belongsTo-Beziehung verknüpft. Hier ist die hasMany Definition:CakePHP: Verbundene Tabellendaten, die in der Ansicht nicht angezeigt werden

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

Und hier ist die belongsTo Definition:

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

Der Controller für meine Ansicht ist tot einfach:

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)); 
} 

Alles, was ich bin versucht zu tun Zeigt das hire_date und ssn aus der Tabelle hr_emp_ids basierend auf hr_cases.emp_user_id = hr_emp_ids = emp_user_id an. Hier ist die Ansicht Code:

<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> 

Tabellenstrukturen:

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 |    | 

Nichts von dem HrEmpId Modell wird angezeigt. Ich bin mir nicht sicher, was ich hier falsch mache. Ich habe solche Assoziationen Dutzende Male ohne Probleme gemacht. Was könnte ich vermissen?

Antwort

1

Ich sehe keinen unmittelbaren Grund, warum die zugehörigen Daten nicht angezeigt werden. Ihre Entdeckung Code hier

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

sieht aus wie es durch die Verwendung getById() vereinfacht werden könnte, weil die einzige Bedingung in $options ist die $id überprüfen. Es lohnt sich, das Containable Behavior dem HrCase-Modell hinzuzufügen und dann das zweite Argument von getById() auf true zu setzen. Dies sollte Ihnen ermöglichen, genau anzugeben, welche zugeordneten Daten zurückgegeben werden.

Edit:

Im HrCase Modell, das Sie mit dem Fremdschlüssel emp_user_id eine $belongsTo Beziehung einrichten, aber das ist nicht der Primärschlüssel in hr_emp_ids. Aus diesem Grund werden die zugehörigen Daten nicht zurückgegeben. Sie müssen so etwas wie dies einzurichten:

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

diese sehen für weitere Informationen How to associate model in CakePHP by fields not named by convention?

+0

Guten Rat zur Verwendung von findById(). Außerdem wurde Verhalten zu relevanten Modellen hinzugefügt. Die Controller-Anweisung sieht nun so aus: '$ options = array ($ this-> HrCase-> findById ($ id), 'contain' => array ('HrEmpId'));' Unglücklicherweise, wenn ich HrEmpId debugge, ist das Array leer. Immer noch ratlos! – Chris

+0

Welche Version von Kuchen verwendest du? – bill

+0

Wir sind auf Version 2.0.5. – Chris

Verwandte Themen