我正在构建一个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。
答案 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。