Я хочу получать данные модели с помощью find (all), но пользователь должен получить только ограниченный набор полей таблицы. Это просто:
$ret = $this->find('all',array('fields'=>array(
'Employee.id','Employee.address_id'
)));
Но эта модель (модель «Сотрудники») также имеет ассоциацию с принадлежностью:
var $belongsTo = array(
'Address' => array(
'className' => 'Address',
'foreignKey' => 'address_id',
'fields' => array('Address.full_name')
)
);
Я хочу, чтобы поле Address.full_name
также отображалось в моих извлеченных данных. Но он не работает с вышеуказанным вызовом find () и выдает ошибку (ошибка SQL: 1054: неизвестный столбец 'Address.full_name' в 'списке полей') при попытке выполнить следующее:
'fields'=>array('Employee.id','Employee.address_id','Address.full_name')
Кто-нибудь знает, как это решить?
РЕДАКТИРОВАТЬ: Я полностью забыл, что Address.full_name является виртуальным полем. Глядя на SQL, созданный Cakephp, становится понятно, почему он не работает:
SELECT
`Employee`.`id`, `Employee`.`address_id`, `Address`.`full_name`
FROM
`employees` AS `Employee`
LEFT JOIN `addresses` AS `Address`
ON (`Employee`.`address_id` = `Address`.`id`)
WHERE 1 = 1
В модели адреса полное_имя определяется следующим образом:
var $virtualFields = array(
'full_name' => 'CONCAT_WS(" ", Address.firstname, Address.surname)'
);
Итак, вопрос заключается в следующем: это ошибка CakePHP, из-за которой он не может включать виртуальные поля (сторонней модели) в список полей, предоставленный для поиска ()?