开发者

Can you use underscores in table names under the Kohana PHP framework (and how)?

开发者 https://www.devze.com 2023-01-14 21:25 出处:网络
The underscore is a special character in Kohana and gets translated into a directory separator but since I have a bunch of existing code that uses underscores in table names, I want to kn开发者_高级运

The underscore is a special character in Kohana and gets translated into a directory separator but since I have a bunch of existing code that uses underscores in table names, I want to kn开发者_高级运维ow if it's possible to configure Kohana to understand that in some way.


One way to do this would be by putting your model classes in subdirectories of the Model folder.

For example, if you had a table called user_profiles, your directories would look like this:

application/
...classes/
......model/
.........user/
............profile.php

and profile.php would be like this:

<?php defined('SYSPATH') or die('No direct access.');

class Model_User_Profile extends ORM 
{
}

I would recommend going with the above approach (we use it at the company where I work), as it's the "standard" Kohana way of doing things, so you will have fewer hassles down the road. However, if you need to for some reason, you could also use the _table_name property of the ORM class (see docs here):

application/
...classes/
......model/
.........userprofile.php

and profile.php would be like this:

<?php defined('SYSPATH') or die('No direct access.');

class Model_UserProfile extends ORM 
{
    protected $_table_name = 'user_profiles'; // <== manually setting table name
}

This can also be helpful if your tables don't quite follow the singular vs. plural convention Kohana uses.


Kohana doesnt replace underscores in table names. You can use everything you want in plain queries ($this->db->query($sql)), Database Query Builder ($this->from($table_name)->...->execute()) or any kind of AR (ORM, Sprig, Jelly - all of them allow you to set table_name property). Also you can use default (calculated from class name) table names as notJim described.


Underscores will be translated into directory separator, that's how kohana autoloading works. But, that's not really matters as you can define $_table_name properties in your model.

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


Yes, you can. Because your model name is the table name with last word pluralized by default. I mean that

Model_Foo_Bar {
}

will be foo_bars table which Kohana will try to find by default.

0

精彩评论

暂无评论...
验证码 换一张
取 消