【发布时间】:2010-09-07 05:07:48
【问题描述】:
下划线是 Kohana 中的一个特殊字符,它被翻译成目录分隔符,但由于我有一堆在表名中使用下划线的现有代码,我想知道是否可以配置 Kohana 以某种方式理解这一点.
【问题讨论】:
下划线是 Kohana 中的一个特殊字符,它被翻译成目录分隔符,但由于我有一堆在表名中使用下划线的现有代码,我想知道是否可以配置 Kohana 以某种方式理解这一点.
【问题讨论】:
一种方法是将模型类放在模型文件夹的子目录中。
例如,如果您有一个名为 user_profiles 的表,您的目录将如下所示:
application/
...classes/
......model/
.........user/
............profile.php
而profile.php 会是这样的:
<?php defined('SYSPATH') or die('No direct access.');
class Model_User_Profile extends ORM
{
}
我建议采用上述方法(我们在我工作的公司使用它),因为它是 Kohana 的“标准”做事方式,因此您以后的麻烦会更少。但是,如果出于某种原因需要,您也可以使用 ORM 类的 _table_name 属性(参见文档here):
application/
...classes/
......model/
.........userprofile.php
而profile.php 会是这样的:
<?php defined('SYSPATH') or die('No direct access.');
class Model_UserProfile extends ORM
{
protected $_table_name = 'user_profiles'; // <== manually setting table name
}
如果您的表格不完全遵循 Kohana 使用的单复数约定,这也会很有帮助。
【讨论】:
Kohana 不会替换表名中的下划线。您可以在普通查询 ($this->db->query($sql))、Database Query Builder ($this->from($table_name)->...->execute()) 或任何类型的 AR (ORM >、Sprig、Jelly - 所有这些都允许您设置table_name 属性)。您也可以使用 notJim 描述的默认(从类名计算)表名。
【讨论】:
下划线将被翻译成目录分隔符,这就是 kohana 自动加载的工作原理。
但是,这并不重要,因为您可以在 model 中定义 $_table_name 属性。
class Model_Profile extends ORM
{
protected $_table_name = 'user_profiles';
}
【讨论】:
是的,你可以。因为您的模型名称是默认情况下最后一个单词复数的表名。我的意思是
Model_Foo_Bar {
}
将是foo_bars 默认情况下Kohana 将尝试查找的表。
【讨论】: