2016-08-02 33 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