Поведение Cakephp, которое выбирает useTable? - PullRequest
0 голосов
/ 11 сентября 2011

Можно ли использовать поведение в Cakephp для установки одной из основных переменных?Я хочу другую таблицу для каждого клиента.

Я думал написать об этом в функции установки, но большинство переменных совершенно пустые.Я создаю $ this-> subdomainid в beforeFind () в app_controller.php, который я явно не могу использовать в модели.

Но мне интересно, могу ли я вообще использовать useTable в поведении?Если я проверю имя хоста в PHP и основываю на этом поддомен, могу ли я использовать subdomain_tablename в качестве таблицы?Я хочу использовать для этого соглашение об именах для таблиц, таких как subdomain_recipes, subdomain_ingredients, то есть client_, а затем обычное соглашение об именах.

В настоящее время у меня есть только 3 отдельных поддоменов, но я абсолютно не хочусмешивать данные в таблицах из разных поддоменов.Я думал о решении в течение нескольких дней, и некоторые размышления приветствуются!

1 Ответ

1 голос
/ 15 сентября 2011

если вы говорите о разных таблицах в одной и той же базе данных, вы можете сделать что-то вроде этого:

, если вы хотите изменить таблицу в каждой модели с одинаковым префиксом

в app_Model

function __construct($id = false, $table = null, $ds = null) {
        $prefix = getPrefix();
    $this->useTable = $prefix.$useTable;
    parent::__construct($id,$table,$ds);
}

Таким образом, он изменит каждую таблицу моделей перед ее использованием .... если вы хотите, чтобы изменялся только клиент модели, просто поместите эту же функцию в модель клиента, если вы хотите, чтобы пара сделалато же самое в этой модели.Если вы хотите, чтобы все, кроме одного, делали это в app_model следующим образом

function __construct($id = false, $table = null, $ds = null) {
    $prefix = getPrefix();
    if ($this->name != 'Client') 
        $this->useTable = $prefix.$useTable;
    parent::__construct($id,$table,$ds);
}

, это не поведение, но оно решает вашу проблему: S если вы хотите сделать это в неправильном поведении, вам нужно будет сделать что-то подобноеиспользуя beforeFind, beforeSave и т. д. (все предыдущие операции в базе данных), или загрузите модель (в контроллере это будет выглядеть так: префикс $ this-> Client-> useTable = $. $ this-> Client-> useTable;)

Помните, что функция getPrefix () - это имеющаяся у вас функция, которая сообщает вам, какой префикс использовать.

Я думаю, что вы всегда должны писать переменную $ useTable = 'Таблица';чтобы это работало.

Если вам нужны разные базы данных, попробуйте это решение отправьте в пекарню

...