DbHelp.ru
Маленький Yii блог
Комментарии
Гость: Sildenafil Citrate 100mg cialis and cialis together this site red cialis barato comprar cialis no lo...
Гость: They are the hunters that thrive in the wind and devour creatures of the land."She [the postmen...
Гость: w http://cialisxtl.com prices of cialis cialis has cialis online what does cialis do
Гость: Buy Sildenafil cialis billig en ligne view site cialis fruty pastillas suaves order cialis or levitr...
Гость: Sildenafil 100mg cialis dose levels homepage here cialis or cialis better vegetal cialis does it wor...



Сервер 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. Наверняка многим из вас понадобится написать некую динамическую загрузку отображений. Т.е. Если указанное отображение есть — загружаем его, если ... "Умная загрузка отображений"

  2. Целью данной статьи, является написание проекта «Hello World» на фреймворке Yii, как наиболее простого проекта. Это позволит читателю освоить ... "Проект Hello World с использованием Yii"

  3. Сегодня на нашем блоге добавилась дополнительная функция – компактная RSS лента новостей. Она была реализована в виде отдельного компонента, который ... "У нас появилась RSS лента "

[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

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

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


Код:
Имя: