CakePHP 2.x – Virtual Field oder auch: Mehr als nur ein DisplayField

Wer schon immer mal mehr als nur ein Feld aus einer ‘belongsTo’ Beziehung anzeigen lassen wollte, der muss mit virtuellen Feldern arbeiten. Einfaches Beispiel:

belongsTo-Beziehung

Ein Termin gehört zu einem User (Termin belongsTo User), entsprechend steht auch im Termin-Model

public $belongsTo = array(
 'User' => array(
 'className' => 'Users',
 'foreignKey' => 'users_id',
 'conditions' => '',
 'fields' => '',
 'order' => ''
 )
 );

User-Model

Innerhalb des User-Models muss nun ein virtuelles Feld definiert geben (welches also in der Realität in der Datenbanktabelle ‘users’ nicht existiert. Dies geschieht mittels der folgenden Definition:

public $virtualFields = array(
 'full_name' => 'CONCAT(User.anrede," ",User.name,
                 ", ", User.vorname)'
 );
 public $displayField = 'full_name';

Lösung zu einem alten Problem

Das beste bei dem Versuch mit dem virtuellen Feld ist, dass dadurch ein altes Problem gelöst werden konnte. (siehe dazu den Blogeintrag vom 08. Oktober 2010!). Es schien so, als würde $displayField nicht berücksichtigt werden. Die Lösung liegt im User-Controller verborgen:

$users = $this->Zeitplan->User->find('list'); 
#funktioniert, berücksichtigt aber nicht $displayField

$users = $this->User->find('list'); 
#funktioniert UND berücksichtigt $displayField

Tags: , , , , , ,

{ 1 Kommentar vorhanden ... bitte schreib den nächsten! }

{ 1 Pingbacks/Trackbacks }

  1. CakePHP: $displayField funktioniert nicht innerhalb von Plugins?!