1

アスタリスクで sip ラインを管理する Kohaha アプリケーションを構築しています。

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 ***
+----------------+------------------------------+------+-----+-----------+----------------+

2 つのテーブルは、実際には 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

1 対 1 の関係を使用する予定がある場合にのみ、これは正しいです。ただし、1 対多の関係を持つことを計画している場合は、$has_many を使用する必要があります。必要に応じて、オプションで他のテーブルのモデルを作成し、そのテーブルに $belongs_to を使用できます。

ここですべて説明されています:http://docs.kohanaphp.com/libraries/orm/starting

于 2010-01-29T00:13:38.097 に答える