2015-03-01 8 views
2

Переходя от приложения cakephp 2, я застрял на попытке использовать $ tablePrefix в своих моделях. Это все еще доступно в Cake 3? Или как я могу использовать что-то еще (пожалуйста, объясните).cakephp 3.0 using tableprefix?

ответ

3

Настольные префиксы исчезли. Существует открытая PR, однако не ясно, в этот момент, когда, и если все это собирается сделать это:

https://github.com/cakephp/cakephp/pull/4505

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

For people still wanting support for prefixes in their tables, there is a way to support it using events. This will probably work for all table operations. Add it to your bootstrap.php file:

EventManager::instance()->on('Model.initialize', function ($event, $instance) { 
    $instance->table('prefix_' . $instance->table()); 
}); 

https://github.com/cakephp/cakephp/pull/4505#issuecomment-76154855

+0

Спасибо! Неудивительно, что я не мог найти его. Позор Я не могу использовать торт при использовании этого обходного пути. Жаль, что «производители» cakephp живут в другом мире от пользователей ........... – Snelweg

+0

Почему вы не можете использовать cakephp при использовании этого обходного пути? –

+0

@Snelweg Это не ** обходное решение, это подходящее место для этого. Я задавался вопросом, почему его не хватает в настройках соединения, но после некоторого обсуждения с Лоренцо я понял, что это на самом деле должно быть сделано на уровне таблиц. ORM может поддерживать другие источники данных, которые * не * вообще не используют или не знают о таблицах, например, базы данных CSV, REST или Graph. Префикс можно настроить, просто используя класс Configure для чтения префикса из конфигурации. – burzum

3

чтобы получить прив IX в таблице, как вы это делали в 2.x просто сделать это в своем классе таблицы:

public function initialize(array $config) { 
    $this->table('my_prefix_' . $this->table()); 
    ... 
} 
0

Я мигрируют некоторые cake2.x код cake3. Небольшое изменение кода ndm для меня до сих пор работало в bootstrap.php, в следующих строках:

Cake\Event\EventManager::instance()->on('Model.initialize', function ($event) { 
    $instance = $event->subject; 
    if ($instance->defaultConnectionName() == 'default') {   
     $instance->table('prefix_' . $instance->table()); 
    } 
});