1

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

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

例如,表 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");
}

?>

编辑:实际上,可以公平地说这些表与外键没有正确关联!多哈。

编辑:看起来 Kohana ORM 不是那么灵活。ORM 可能不是要走的路,并且最适合可以更改数据模型的全新项目。原因是键名必须遵循特定的命名约定,否则它们在 Kohana 中不会相关。

4

2 回答 2

1

这不取决于 kohana ORM,而是取决于您的数据库设计。使用整数作为外键而不是 varchar 一直是“规则”,我已经很久没有见过这样的设计了。

添加整数 FK 或者根本不考虑使用 ORM,那样就行不通了。

编辑:

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

protected $has_one = array('buddy' => array('model' => 'sip_buddy', 'foreign_key' => 'name' ) );
于 2010-04-22T09:43:25.590 回答
0

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

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

于 2010-01-29T00:13:38.097 回答