我在我的程序中使用自定义类,可以在需要时连接到多个表。
我正在尝试创建该类的新实例,并且我可以通过构造函数传递不同的表名和别名。这适用于表名,但它没有在文档
中设置模型别名创建一个新对象。正在实例化的类是列表
$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 :(得分:0)
我在我的程序中使用可以连接到多个的自定义类 我需要的表格。
老实说,在大多数情况下,这是一个非常糟糕的主意。如果您已经阅读了本书中的MVC章节,请再次阅读,如果现在不读它。
你错了,模型类的构造函数不会知道别名的第四个参数check your own link并再次读取它。
public function __construct($id = false, $table = null, $ds = null)
但是,如果你想坚持不好的做法,你总是可以使用ClassRegistry::init()来实例化Model对象。
示例简单使用:获取Post模型实例 ClassRegistry ::的init('邮政&#39);
扩展:数组('类' =>' ClassName','别名' => ' AliasNameStoredInTheRegistry&#39);
模型类可以接受可选数组(' id' => $ id,' table' => $ table,' ds' => $ ds,'别名' => $别名);
只需使用Model
作为班级名称,并提供您想要的任何表格。
答案 1 :(得分:0)
解决此问题的方法是直接创建模型关联到db表。使用表名作为类名并瞧
'Religion' => array(
'className' => 'list_religions',
'foreignKey' => 'religion_id',
'conditions' => '',
'fields' => '',
'order' => ''
)