DbHelp.ru
Маленький Yii блог
Комментарии
Гость: monopoly slots free slot games free online slots no download infinity slots | https://freecasinoslot...
Гость: casino slots free games for casino slots hollywood free casino slots no download free slots vegas | ...
Гость: hollywood casino online slots pch slots tournament hearts of vegas free slots free vegas world slots...
Гость: house of fun free slots casino games slots free konami free slots turning stone online slots | https...
Гость: hot shot casino slots online slots free liberty slots casino gossip slots | https://casinoslotsonlin...



Сервер Ultima Online - Forest Wars (от создателя данного блога)

Используем префиксы для таблиц

Рубрика: Мелкие заметки на тему Yii

Оцените эту статью:

Рейтинг: 0.00 (0)
18 Ноя. 2009
Опубликовать в Twitter Написать в Facebook Опубликовать в своем блоге livejournal.com

Очень часто мне приходится заставлять работать проекты с практически идентичной структурой базы данных. Когда хостинг накладывает на меня ограничение что всё это должно быть в одной БД — возникает много проблем. В принципе есть только два варианта: использовать префиксы для таблиц и научить фреймворк с ними работать, либо постоянно править файлы модели и менять имена таблиц в ручную. 

---

Простым переопределением одного метода я добился удобной работы с префиксами. Теперь мне не требуется для каждого проекта, в каждой модели подставлять в ручную префикс.

Если мы используем в проекте модели типа ActiveRecord, мы соответственно наследуем свой класс от CActiveRecord:

class MyModel extends CActiveRecord {   … } 

В моем случае мы создадим главный класс для всех моделей MyActiveRecord (с наследованием от CActiveRecord), а все наши модели — будем наследовать именно от него.

В самом классе MyActiveRecord мы переопределим метод tableName который позволит нам использовать префиксы. Смотрим:

class MyActiveRecord extends CActiveRecord
{
        public $prefix = 'tablePrefix_';
 
        public function tableName()
        {
                return $this->prefix . parent::tableName();
        }
}

Вот в принципе и все. Теперь все модели которые вы будите наследовать от MyActiveRecord — будут иметь префикс «tablePrefix_». Это означает что если в tableName у вас указанно «Users», то обращение будет происходить к таблице «tablePrefix_Users».

Вот как-то так :)



Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
Другие yii статьи:

  1. Поздравляю всех с выходом Yii Framework 1.1 beta next Список изменений Загрузить версию ... "Yii PHP framework 1.1 beta"

  2. Сегодняшняя статья является переводом "Manage application configuration in different modes" из Cookbook. При создании нашего приложения единственным параметром который ... "Используем много конфигураций в одном приложении"

  3. Хорошая практика для любого серьезного фреймворка - дать пользователям на растерзание новый релиз до его официального появления для массы (пусть ... "Yii 1.1.13 RC"

[adm] zolter

Было сказано: Среда, 18 Ноябрь 2009

Очень простая статья. Просто давно уже так делаю и решил дать рецепт тем кто еще не решился на такой шаг :)

[guest] hyzhak

Было сказано: Четверг, 19 Ноябрь 2009

В Yii 1.1 работа с префиксами уже учтена. для єтого в конфиге в компоненте db пишем:


tablePrefix => 'prefix_',


а в модели


public function tableName()
{
return '{{tablename_without_prefix}}';
}


http://www.yiiframework.com/doc/guide/database.dao#using-table-prefix

[adm] zolter

Было сказано: Четверг, 19 Ноябрь 2009

Ага, спасибо :)

Я именно про 1.0.10 и ниже говорил :)

[guest] RSol

Было сказано: Четверг, 19 Ноябрь 2009

А я делаю в конфиге параметр префикс, а потом делаю:

public function tableName(){
return Yii::app()->params['prefix].parent::tableName();
}

[adm] zolter

Было сказано: Четверг, 19 Ноябрь 2009

Да тож вариант :)

[guest] Гость

Было сказано: Пятница, 18 Декабрь 2009

Создал в папке protected\components файл MyActiveRecord.
В нем:


class MyActiveRecord extends CActiveRecord
{
public function tableName(){
return Yii::app()->params['tablePrefix'].parent::tableName();
}
}


в config/mian.php

'params'=>array(
'tablePrefix'=>'tbl_',
)


В модели:
class Page extends MyActiveRecord{...}

Не работает, ошибок не выдает, но и префикс не подставлен.

С Yii начал работать пару дней назад..

[guest] zolter

Было сказано: Суббота, 19 Декабрь 2009

Попробуйте сделать именно как в описанной статье выше, без описания префикса через конфиг.

А так в принципе в tableName вы можете сделать die(Yii::app()->params['tablePrefix']) и посмотреть видна ли ваша переменная префикса из конфига, в виджите

[guest] Гость

Было сказано: Суббота, 19 Декабрь 2009

Нет, не выводит)
За наводку спасибо, буду копать.

[guest] олег

Было сказано: Пятница, 26 Ноябрь 2010

спасибо, пригодилось

Оставить комментарий


Код:
Имя: