Как создать виртуальное поле с управляемым поведением в CakePHP 2.6

У меня есть этот код в модели User:

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

и в модели Member:

$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' => ''
)
);
?>

Когда я называю Fuction rest_findUserById () Я получаю этот вывод:

/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'
)
)
)

но когда я вызываю этот код:

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

Я получаю этот вывод:

/app/Model/User.php (строка 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'
)
)

Как вы можете видеть, виртуальное поле, т.е. «полное имя», появляется во втором выводе, но не в первом.
Как я могу это исправить?

0

Решение

От руководство

вы не можете использовать virtualFields на связанных моделях

предлагаемое решение состоит в том, чтобы скопировать виртуальное поле в вашу модель, таким образом

/app/Model/User.php

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

Конечно, это не работает для отношений hasMany или HABTM. Также обратите внимание, что таким образом вы найдете виртуальное поле в User массив данных, а не в Member массив данных

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]