你可以在Kohana PHP框架下的表名中使用下划线(以及如何)?

时间:2010-09-07 05:07:49

标签: php kohana

下划线是Kohana中的一个特殊字符并被转换为目录分隔符,但由于我有一堆在表名中使用下划线的现有代码,我想知道是否可以配置Kohana以某种方式理解

4 个答案:

答案 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表。