Frage

Ich habe ein Modell Angestellten bekommt, die ein Adress-Modell belongsTo. Wenn ich Daten aus dem Mitarbeiter-Modell holen, wird der zugehörige Adresseintrag zu hergeholt. Darüber hinaus hat das Adressmodell ein virtualField full_name. Das sieht wie folgt aus:

Array 
(
[0] => Array
       (
        [Employee] => Array
            (
                [id] => 1
                [address_id] => 33
                [username] => ...
                ...
            )

        [Address] => Array
            (
                [id] => 33
                [firstname] => Blah
                [full_name] => Blah Blubb
                ...
            )

    )

[1] => Array  (
        [Employee] => Array   (
                [id] => 2
                ...

Ich will auch in dem Mitarbeiter Teil des Datenfeldes dieses virtualField aufgenommen habe, wie

Array (
[0] => Array (
        [Employee] => Array
            (
                [id] => 1
                [full_name] => Blah Blubb
                ...
            )

Tis nicht möglich ist, indem Sie gerade hinzufügen

zu lösen
$virtualFields = array(
    'full_name' => 'CONCAT_WS(" ", Address.firstname, Address.surname)',
);

zum Modell Mitarbeiter, wie das Kochbuch heißt Es gibt eine Lösung vorgeschlagen ( „kopieren virtualFields von einem Modell zum anderen zur Laufzeit, wenn Sie sie benötigen für den Zugriff auf“), aber ich verstehe nicht, diese Lösung. Wo habe ich diese zu platzieren? In der Steuerung? In dem Modell in der Funktion find?

Vielen Dank für die Hilfe

War es hilfreich?

Lösung 2

Ich mache das von Hand jetzt in der Callback-Funktion Modell afterfind:

array_walk($results,function(&$a){
        if(isset($a['Address']['full_name'])) {
            $a['Employee']['full_name'] = $a['Address']['full_name'];
            unset($a['Address']);
        }
    });

Könnte es ist nicht schön, aber es funktioniert.

Andere Tipps

http: // Buch. cakephp.org/view/1608/Virtual-fields#Virtual-fields-and-model-aliases-1632

  

Die Umsetzung der virtualFields in 1.3 hat einige Einschränkungen.   Zuerst kann man nicht virtualFields auf zugehörigen Modelle verwenden für   Bedingungen, Ordnung, oder Felder Arrays. Dadurch wird in der Regel zur Folge   ein SQL-Fehler wie die Felder werden nicht durch die ORM ersetzt. Das ist   denn es ist schwierig, die Tiefe, in der ein zugehörigen abzuschätzen   Modell gefunden werden könnte.

Fügen Sie folgende zu Ihrem Modell:

public function __construct($id=false,$table=null,$ds=null){
    parent::__construct($id,$table,$ds);
    $this->virtualFields = array(
        'full_name'=>"CONCAT(`Address.firstname`,' ',`Address.surname`)"
    );
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top