2016-08-02 3 views
0

Ich habe diesen Code in Modell Benutzer erstellen:Wie ein virtuelles Feld mit contain Verhalten in CakePHP 2.6

$hasOne = array(
    'Member' => array(
     'className' => 'Member', 
     'foreignKey' => 'user_id', 
     'dependent' => true 
     ) 
    ); 


function rest_findUserById($id = NULL) { 
    $row = $this->find(
     'first', 
     array(
      'contain' => array(
       'UserSession'=>array(
        'fields'=>array('user_id', 'session_token') 
       ) , 
       'Member' => array(
        'fields' => array("*") 
       ) 
      ), 
      'fields' => array('username', 'email'), 
      'conditions' => array('User.id' => $id) 
     )); 

     if (!$row) { 
      return FALSE; 
     } 
     debug($row);exit; 
} 

und in Modell Mitglied:

$virtualFields = array(
      'full_name' => 'CONCAT(Member.first_name, " ",Member.last_name)' 
     ); 

    $belongsTo = array(
     'Country' => array(
      'className' => 'Country', 
      'foreignKey' => 'country_id', 
      'conditions' => '', 
      'fields' => '', 
      'order' => '' 
     ), 


      'User' => array(
      'className' => 'User', 
      'foreignKey' => 'user_id', 
      'conditions' => '', 
      'fields' => '', 
      'order' => '' 
     ) 
    ); 
?> 

Wenn ich rufe fuction rest_findUserById() ich diese Ausgabe:

/app/Model/User.php (line 378) 

array(
    'User' => array(
     'username' => 'testuser', 
     'email' => '[email protected]', 
     'id' => '71' 
    ), 
    'Member' => array(
     'id' => '11', 
     'user_id' => '71', 
     'first_name' => 'Whjc', 
     'last_name' => 'test_user_lname', 
     'email' => '', 
     'phone' => '778899554455', 
     'image_dir' => '11', 
     'image' => '92e20fd0260dcc5ea289611221723b6a.jpg', 
     'address_line_1' => 'Shhd', 
     'address_line_2' => 'sdf', 
     'city' => 'Los Angeles Area', 
     'state' => 'delhi', 
     'country_id' => '0', 
     'zip_code' => '56456', 
     'is_address_different' => false, 
     'date_of_birth' => '0000-00-00', 
     'referred_by' => 'asdf', 
     'created' => '2016-07-27 13:52:30', 
     'created_by' => '3', 
     'modified' => '2016-08-02 12:25:22', 
     'modified_by' => '3', 
     'status' => false 
    ), 
    'UserSession' => array(
     (int) 0 => array(
      'user_id' => '71', 
      'session_token' => 'a685b3db5ab87a928716c7d8b3272572' 
     ) 
    ) 
) 

aber wenn ich rufe diesen Code:

$this->Member->recursive = -1; 
     debug($this->Member->find('first')); 

ich diese Ausgabe:

/app/Model/User.php (Linie 377)

array(
    'Member' => array(
     'id' => '4', 
     'user_id' => '64', 
     'first_name' => 'SDFS SDF', 
     'last_name' => 'test_user_lname', 
     'email' => '', 
     'phone' => '778899554455', 
     'image_dir' => '', 
     'image' => '', 
     'address_line_1' => 'sdf', 
     'address_line_2' => 'sdf', 
     'city' => 'Los Angeles Area', 
     'state' => 'delhi', 
     'country_id' => '0', 
     'zip_code' => '56456', 
     'is_address_different' => false, 
     'date_of_birth' => '1970-01-01', 
     'referred_by' => 'asdf', 
     'created' => '2016-07-22 15:25:30', 
     'created_by' => '0', 
     'modified' => '2016-07-22 15:25:30', 
     'modified_by' => '0', 
     'status' => false, 
     'full_name' => 'SDFS SDF test_user_lname' 
    ) 
) 

, wie Sie das virtuelle Feld ie'full_name sehen‘wird in den kommenden zweite Ausgabe, aber nicht in der ersten Ausgabe. Wie kann ich das beheben?

Antwort

1

Vom manual

Sie nicht virtualFields auf zugehörigen Modelle

die vorgeschlagene Lösung zu kopieren, ist das virtuelle Feld in Ihr Modell, auf diese Weise

/app/Modell verwenden können /User.php

$this->virtualFields['member_full_name'] = $this->Member->virtualFields['full_name']; 

Natürlich funktioniert das nicht für hasMany oder HABTM Beziehungen. Beachten Sie auch, dass Sie auf diese Weise das virtuelle Feld im Datenfeld User und nicht im Member Datenfeld

finden
Verwandte Themen