【问题标题】:Can you use underscores in table names under the Kohana PHP framework (and how)?您可以在 Kohana PHP 框架下的表名中使用下划线(以及如何使用)?
【发布时间】:2010-09-07 05:07:48
【问题描述】:

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

【问题讨论】:

    标签: php kohana


    【解决方案1】:

    一种方法是将模型类放在模型文件夹的子目录中。

    例如,如果您有一个名为 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 使用的单复数约定,这也会很有帮助。

    【讨论】:

      【解决方案2】:

      Kohana 不会替换表名中的下划线。您可以在普通查询 ($this-&gt;db-&gt;query($sql))、Database Query Builder ($this-&gt;from($table_name)-&gt;...-&gt;execute()) 或任何类型的 AR (ORM >、SprigJelly - 所有这些都允许您设置table_name 属性)。您也可以使用 notJim 描述的默认(从类名计算)表名。

      【讨论】:

        【解决方案3】:

        下划线将被翻译成目录分隔符,这就是 kohana 自动加载的工作原理。 但是,这并不重要,因为您可以在 model 中定义 $_table_name 属性。

        class Model_Profile extends ORM
        {
            protected $_table_name = 'user_profiles';
        }
        

        【讨论】:

          【解决方案4】:

          是的,你可以。因为您的模型名称是默认情况下最后一个单词复数的表名。我的意思是

          Model_Foo_Bar {
          }
          

          将是foo_bars 默认情况下Kohana 将尝试查找的表。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-27
            • 2011-12-05
            • 1970-01-01
            • 1970-01-01
            • 2021-10-12
            • 2012-06-13
            相关资源
            最近更新 更多