我已经经历了几个网站(包括这一个),不幸的是作为一个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