2015-01-21 2 views
0

Я использую собственный класс в моей программе, который может подключаться к нескольким таблицам как и когда мне нужно.Невозможно указать Model-> alias

Я пытаюсь создать новый экземпляр класса, и я могу передать другое имя таблицы и псевдоним через конструктор. Это работает для имени таблицы, но не устанавливает псевдоним модели, как следует в документации

Создание нового объекта. Класс, который инстанцирован является Списки

$lists = new Lists(null, 'list_musicians', null, null, 'Musician'); 

класса Конструктор

public function __construct($id = false, $table = null, $ds = null, $name = null, $alias) { 
    parent::__construct($id, $table, $ds, $name, $alias); 
    $this->virtualFields['full_name'] = sprintf(
     'CONCAT(%s.first_name, " ", %s.last_name)', $this->alias, $this->alias 
    ); 

    //debug($this->alias);die; 
} 

Это будет подключаться к таблице с именем «list_musicians» или любой другой таблице имя я прохожу в, но $alias поле не получает назначен $this->alias Если я переназначу псевдоним вручную, виртуальные поля не будут включены в тот же массив, что и результат, как указано в documentation. Псевдоним всегда Lists

Как установить псевдоним модели через конструктор?

ответ

0

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

Честно говоря, это довольно плохая идея в большинстве случаев. Если вы уже прочитали главу MVC из книги, прочитайте ее снова, если не прочитайте ее сейчас.

И вы ошибаетесь, конструктор класса модели не знает 4-й аргумент для псевдонима, check your own link и читает его снова.

public function __construct($id = false, $table = null, $ds = null) 

Однако, если вы хотите, чтобы настаивать на плохой практике всегда можно создавать объекты Модель с помощью ClassRegistry::init().

Примеры Простое использование: получить экземпляр модели Post ClassRegistry :: init ('Post');

Развернуть: array ('class' => 'ClassName', 'alias' => 'AliasNameStoredInTheRegistry');

Класс класса может принимать необязательный массив ('id' => $ id, 'table' => $ table, 'ds' => $ ds, 'alias' => $ alias);

Просто используйте Model как имя класса и предоставите любую таблицу, которую вы хотите.

+0

Есть около 6 до 8 таблиц БД, что дом различных списков информации, что по большей части его случай идентификатора и имени Thats необходим, или ID и виртуального поле , Я не вижу причин иметь отдельные модели и представления для каждого из них, поскольку его общая функциональность и я пытаюсь сохранить проект DRY. Я надеюсь вызвать модель из любого контроллера, который мне нужен, чтобы создать список для соответствующего представления.Если то, что я хочу сделать, - это не хорошая практика MVC, каково решение, так как я думаю, что все отдельные пустые модели не нужны, это лишнее раздувание. –

+0

Я не могу ответить, не зная схемы. Если все таблицы одинаковы, я бы спросил, почему вы не добавляете поле типа и не делаете его одной таблицей. ClassRegistry :: init() должен решить вашу проблему. – burzum

0

Решение этой проблемы заключается в создании ассоциаций моделей непосредственно к таблицам db. Используйте имя таблицы как имя класса и вуаля

'Religion' => array(
     'className' => 'list_religions', 
     'foreignKey' => 'religion_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    )