如何在Kohana ORM中将具有不同外键名称的表关联起来?

时间:2010-01-28 23:15:52

标签: php kohana kohana-orm

我正在构建一个Kohaha应用程序来管理星号中的sip行。

我想使用ORM,但我想知道如何将已经建立的某些表联系起来。

e.g。表sip_lines看起来像这样。

+--------------------+------------------+------+-----+-------------------+-----------------------------+
| Field              | Type             | Null | Key | Default           | Extra                       |
+--------------------+------------------+------+-----+-------------------+-----------------------------+
| id                 | int(10) unsigned | NO   | PRI | NULL              | auto_increment              |
| sip_name           | varchar(80)      | NO   | UNI | NULL              |                             |
| displayname        | varchar(48)      | NO   |     | NULL              |                             |
| line_num           | varchar(10)      | NO   | MUL | NULL              |                             |
| model              | varchar(12)      | NO   | MUL | NULL              |                             |
| mac                | varchar(16)      | NO   | MUL | NULL              |                             |
| areacode           | varchar(6)       | NO   | MUL | NULL              |                             |
| per_line_astpp_acc | tinyint(1)       | NO   |     | 0                 |                             |
| play_warning       | tinyint(1)       | NO   |     | 0                 |                             |
| callout_disabled   | tinyint(1)       | NO   |     | 0                 |                             |
| notes              | varchar(80)      | NO   |     | NULL              |                             |
| last_update        | timestamp        | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+--------------------+------------------+------+-----+-------------------+-----------------------------+

sip_buddies就是这样:

+----------------+------------------------------+------+-----+-----------+----------------+
| Field          | Type                         | Null | Key | Default   | Extra          |
+----------------+------------------------------+------+-----+-----------+----------------+
| id             | int(11)                      | NO   | PRI | NULL      | auto_increment | 
| name           | varchar(80)                  | NO   | UNI |           |                | 
| host           | varchar(31)                  | NO   |     |           |                | |                |
| lastms         | int(11)                      | NO   |     | 0         
*** snip ***
+----------------+------------------------------+------+-----+-----------+----------------+

这两个表实际上是相关的sip_lines.sip_name = sip_buddies.name

我如何在Kohana ORM中将它们联系起来,因为这不是很正确吗?

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

/* A model for all the account information */
class Sip_Line_Model extends ORM
{
    protected $has_one = array("sip_buddies");
}

?>
编辑:实际上,可以公平地说这些表与外键没有正确关系! DOH。

编辑:看起来Kohana ORM不那么灵活。对于可以更改数据模型的全新项目,ORM可能不是最佳选择。原因是键名必须遵循特定的命名约定,否则它们将不相关 在Kohana。

2 个答案:

答案 0 :(得分:1)

这不取决于kohana ORM,而是取决于您的数据库设计。使用整数作为外键而不是varchar总是一个“规则”,我好久没见过像这样的设计。

添加整数FK或者根本不考虑使用ORM,只是不这样做。

编辑:

是的,如果你真的想这样做的话;

protected $has_one = array('buddy' => array('model' => 'sip_buddy', 'foreign_key' => 'name' ) );

答案 1 :(得分:0)

只有在您计划使用一对一关系时才正确。但是,如果您计划建立一对多关系,则需要使用$ has_many。根据您的需要,您可以选择为另一个表创建一个模型,并使用$ belongs_to。

这一切都在这里解释:http://docs.kohanaphp.com/libraries/orm/starting