下划线是Kohana中的一个特殊字符并被转换为目录分隔符,但由于我有一堆在表名中使用下划线的现有代码,我想知道是否可以配置Kohana以某种方式理解
答案 0 :(得分:4)
执行此操作的一种方法是将模型类放在Model文件夹的子目录中。
例如,如果您有一个名为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的做事方式,所以你将会减少麻烦。但是,如果您出于某种原因需要,还可以使用_table_name
类的ORM
属性(请参阅文档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使用的单数和复数惯例,这也会有所帮助。
答案 1 :(得分:1)
Kohana 不会替换表名中的下划线。您可以在纯查询($this->db->query($sql)
),数据库查询生成器($this->from($table_name)->...->execute()
)或任何 AR ()中使用您想要的所有内容ORM , Sprig , Jelly - 所有这些都允许您设置table_name
属性。您还可以使用默认(从类名计算)表名称作为 notJim 描述。
答案 2 :(得分:0)
下划线将被翻译成目录分隔符,这就是kohana自动加载的工作原理。
但是,这并不重要,因为您可以在$_table_name
中定义model
属性。
class Model_Profile extends ORM
{
protected $_table_name = 'user_profiles';
}
答案 3 :(得分:0)
是的,你可以。因为您的模型名称是表名,默认情况下复数为最后一个单词。我的意思是
Model_Foo_Bar {
}
将是Kohana默认会尝试查找的foo_bars
表。