DbHelp.ru
Маленький Yii блог
Комментарии
Гость: Намереваетесь оттрахать три киски сразу, обратите взо...
Гость: «Халва» - Карта Рассрочки взять кредит частный займ ...
Гость: Регистрируешься - огромный бонусы. Играешь - огромный ...
Гость: Быстро и качественно придам вашему фото идеальный вид....
Гость: Информативно,продолжай в том же духе [url=http://forum.oncolo...



Сервер 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. Поздравляю всех с "кругленькой" версией любимого фреймворка! В этом выпуске было исправлено около тридцати ошибок и произведены незначительные улучшения существующих функций. next К ... "Поздравляю всех с выходом версии 1.0.10!"

  2. Я рад объявить о выпуске Yii Framework v1.0.6! next ... "Версия 1.0.6"

  3. Эта статья устарела т.к. была написана для yii версии 1.0.х; Если вы используете более новую версию - у вас могут ... "Урок 8 : Подключаем дизайн"

[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

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

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


Код:
Имя: