Nasıl Kohana ORM farklı yabancı anahtar adları tablo ile ilişkilendirilir?

2 Cevap php

Ben asteriskte yudum hatları yönetmek için bir Kohaha uygulama inşa ediyorum.

Ben ORM kullanmak isteyen değilim ama zaten iyi kurulmuş bazı tablolar ilişki nasıl merak ediyorum.

örneğin tablo sip_lines bu gibi görünüyor.

+--------------------+------------------+------+-----+-------------------+-----------------------------+
| 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 şudur:

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

İki tablo aslında sip_lines.sip_name = sip_buddies.name olarak ilişkilidir

Bu oldukça doğru it would olmaz gibi nasıl Kohana ORM onları ilişkilendirilir?

<?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");
}

?>

EDIT: Aslında, bu tabloları düzgün yabancı anahtarlar ile ilişkili olmadığını söylemek adil olur! doh.

EDIT: Looks like Kohana ORM is not that flexible. ORM is probably not the way to go and works best for completely new projects where the data model can be altered. The reason being that the key names must follow a specific naming convention or else they won't relate in Kohana.

2 Cevap

Bu Kohana ORM kadar ancak db tasarımı kadar değil. Her zaman yabancı anahtarla değil varchar olarak tamsayı kullanmak için bir "kural" olmuştur, ben yaş için böyle bir tasarım görmedim.

Tamsayı FKS ekle veya tüm ORM kullanarak sanmıyorum, sadece bu şekilde çalışmıyor.

EDIT:

Ve evet, gerçekten bu şekilde yapmak istiyorum;

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

Bu bir-bir ilişkisi kullanmayı planlıyorsanız, yalnızca doğru. Ancak, bir-çok ilişkileri olan planlıyorsanız, size $ has_many kullanmak isteyeceksiniz. Ihtiyaçlarınıza bağlı olarak isteğe bağlı diğer tablo için bir model oluşturabilir ve o biri için $ belongs_to kullanın.

Hepsi burada izah ediyor: http://docs.kohanaphp.com/libraries/orm/starting