我已經經歷了幾個網站(包括這一個),不幸的是作爲一個Kohana新手我仍然無法得到這個工作。數據關係非常簡單,我有一個公司記錄,它應該鏈接到1個狀態記錄和1個記錄。當然,表格中會有多家公司,但每家公司只允許與每個公司相關聯(並且必須是)。Kohana 3 ORM關係問題
我所擁有的是:
class Model_Company extends ORM
{
protected $_has_one = array(
'companystatus' => array('model' => 'companystatus', 'foreign_key' => 'entryid'),
'companytype' => array('model' => 'companytype', 'foreign_key' => 'entryid')
,
);
}
公司現狀型號:
<?php defined('SYSPATH') or die('No direct access allowed.');
class Model_CompanyStatus extends ORM
{
protected $_table_name = 'datadictionary';
protected $_primary_key = 'entryid';
protected $_has_many = array(
'company' => array('foreign_key' => 'statusid')
,
);
}
?>
公司類型型號:
<?php defined('SYSPATH') or die('No direct access allowed.');
class Model_CompanyType extends ORM
{
protected $_table_name = 'datadictionary';
protected $_primary_key = 'entryid';
protected $_has_many = array(
'company' => array('foreign_key' => 'companytypeid')
,
);
}
?>
的companystatus和companytype模型映射到一個單一的表,有2個字段,entryid和entryname。該表稱爲「datadictionary」,並具有適當的屬性,因此我不必將「id」用作記錄標識字段。
現在我打開我的公司的記錄是這樣的:
$company = ORM::factory('company')
->where('id', '=', 1)
->where('hasbeendeleted', '=', 0)
->find();
的問題是,我沒有得到任何東西爲公司的companystatus和companytype屬性,當我做了$公司 - > companystatus-> find()我得到返回的第一條記錄,這很奇怪。我錯過了什麼?
謝謝!
:-)
編輯: 爲了簡便起見,公司表具有以下字段:
ID (primary key) - auto inc int
CompanyName - varchar(255)
StatusID - int
CompanyTypeID - int
HasBeenDeleted - smallint (0 for false, 1 for true)
數據字典表:
EntryID (primary key) - auto inc int
EntryName - nvarchar(255)
示例公司記錄:
ID: 1
CompanyName: TestCompany
StatusID: 1
CompanyTypeID: 3
HasBeenDeleted: 0
個
實例數據字典記錄:
EntryID: 1
EntryName: Active
EntryID: 2
EntryName: Inactive
EntryID: 3
EntryName: Customer
EntryID: 4
EntryName: Supplier
非常感謝,從清潔的角度來看,您的評論非常好。但是,問題是,在將關係設置爲我的原始帖子時,我沒有收到CompanyStatus或CompanyType記錄。這是我的問題。我希望Kohana ORM爲我處理這件事,而不是做3個數據庫調用(公司,然後是狀態和類型記錄)。 – Dominik 2011-05-11 03:20:52
@Dominik是否在'Model_CompanyStatus'和'Model_CompanyType'中設置了'$ _has_many'來將它們鏈接到'Model_Company'? (我假設你試圖在狀態/類型和公司之間實現一對多關係)。 – Austin 2011-05-11 03:47:32
再次(再次感謝您抽出時間),是的,我在Model_CompanyStatus和Model_CompanyType中有$ _has_many文件。當我調用ORM方法獲得單個公司時,是否需要撥打電話以獲取關聯的公司類型和狀態?我曾試過$ company-> companystatus-> find();但是這不會返回基於公司記錄的值,它似乎只是獲取第一條記錄,或者僅顯示視圖中的第一條記錄。 – Dominik 2011-05-12 03:52:39