Возможно ли, чтобы некоторые модели находились в одной базе данных и других моделях в другой (используя одно и то же соединение)?
У меня есть несколько таблиц только для чтения, которые я хочу использовать для нескольких установок моей системы. Другие таблицы должны быть за установку. Например, users
– это общая таблица, а posts
– для каждой установки.
В одной схеме (назовем ее «shared») у нас есть таблица users
, а в другой схеме («mycake») есть posts
.
Я смог получить чтение модели User из другой базы данных, создав новое соединение с базой данных, которое указывает на общую базу данных (хотя две базы данных находятся на одном и том же хосте и оба доступны с одинаковыми данными для входа).
class User extends AppModel { var $useDBConfig = 'sharedConnection'; }
Проблема заключается в том, когда приходит время присоединиться к таблице posts
. Он не добавляет имя схемы к имени таблицы, и поэтому он не может найти posts
.
// what it does SELECT * FROM users User INNER JOIN posts Post ... // what I'd like it to do: SELECT * FROM shared.users User INNER JOIN mycake.posts Post ...
Итак, в принципе, есть ли способ присвоить модель полностью имя таблицы модели и заставить ее использовать ее во всех своих запросах? Установка var $useTable = 'shared.users';
не помогает …
У этого сайта есть способ сделать это, но он немного взломан.
Здесь есть решение.
Я создал сайт в CakePHP, у которого есть модели, использующие разные базы данных, и у меня никогда не было проблем с присоединением к различным базам данных – структура, казалось, заботилась обо всем этом для меня. Хотя вам может потребоваться явно указать таблицы базы данных, используемые в ваших моделях, чтобы заставить ее работать.