DbHelp.ru
Маленький Yii блог
Комментарии
Гость: В том случае, если вы не имеете представления, куда обр...
Гость: Document obrazec http://abc-trading.com.ua/?act=Скачать-презентацию-забол...
Гость: Document obrazec http://2004959.ru/?doc=скачать-книгу-дерматология-фи...
Гость: cheap generic Tastylia in Ireland next day shipping product ; buying Tastylia in Canada overnigh...
Гость: Medical document 004 http://adtpro.ru/?docx=Презентации-про-жд-на-англий...



Сервер 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. Надо было мне как то выводить сообщения об ошибках на экран. Использовать исключения - плохой подход. Поэтому для того чтобы ... "Messager + jQuery"

  2. Подсветка php кода на страницах блога — штука невероятно удобная. Давайте в двух словах разберемся как я подкрутил её у ... "Подсветка синтаксиса"

  3. Немного обсудив своё творение «Компонент Rss ленты v 1.0» на русском форуме я решил немного его переделать. Мною было ... "Компонент Rss ленты v2.0"

[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

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

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


Код:
Имя: