У меня есть CakePHP-модель «Человек», которая загружает свои данные из mysql-view (public $useTable = 'people_rel';
, people_rel - это представление).
Вид соединяет некоторые данные с таблицей «люди».CakePHP: Сохранить модель загружена из MySQL View
Вид prefix_people_rel:
CREATE
ALGORITHM = UNDEFINED
DEFINER = `xxxxxxx`@`%`
SQL SECURITY DEFINER
VIEW `prefix_people_rel` AS
select
`prefix_people`.`id` AS `id`,
`prefix_people`.`username` AS `username`,
`prefix_people`.`first_name` AS `first_name`,
`prefix_people`.`last_name` AS `last_name`,
`prefix_people`.`email` AS `email`,
`prefix_people`.`password` AS `password`,
`prefix_people`.`status` AS `status`,
`prefix_people`.`outpost_id` AS `outpost_id`,
`prefix_outposts`.`region_id` AS `region_id`,
`prefix_regions`.`district_id` AS `district_id`,
`prefix_districts`.`country_id` AS `country_id`
from
(((`prefix_people`
left join `prefix_outposts` ON ((`prefix_people`.`outpost_id` = `prefix_outposts`.`id`)))
left join `prefix_regions` ON ((`prefix_outposts`.`region_id` = `prefix_regions`.`id`)))
left join `prefix_districts` ON ((`prefix_regions`.`district_id` = `prefix_districts`.`id`)))
Таблица prefix_people:
Колонки region_id, district_id и country_id только для чтения в данной модели, они редактируются в моделях Аутпост, регион и район.
Проблема в том, что я не могу сохранить модель, потому что она загружена из представления.
Я хотел бы загрузить данные из вида people_rel и сохранить их в таблице людей. Как я могу это сделать? (Я использую CakePHP 2.5.3 и хочу обновиться до 3, как только стабильная версия будет доступна)
Большое спасибо!
EDIT:
Это не помогло:
модельное лицо:
public function beforeSave($options = array())
{
// ... Password hashing ...
$this->useTable = 'people';
return true;
}
public function afterSave($created, $options = array()) {
$this->useTable = 'people_rel';
}
EDIT 2:
Действительно аналогичное решение работает. См. Ответ ниже.
это не ясно, если вы используете ту же самую модель 'People 'читать и сохранять. Но если это так, попытались ли вы изменить псевдоним таблицы (и таблицу базы данных) в начале 'beforeSave' и изменить его на' people_rel' в конце afterSave? Неужели я не понимаю вашу проблему? – Nunser
Я читаю данные из представления «people_rel» и хочу написать изменения в таблице «люди», но все это делается из модели «Человек». Я попробовал вашу идею с помощью before- and afterSave (см. Мое редактирование), но это не сработало. –
Основываясь на вашей идее, я нашел решение. Я добавлю это ниже. Благодаря! –