Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 科哈纳3问题_Php_Model View Controller_Orm_Kohana - Fatal编程技术网

Php 科哈纳3问题

Php 科哈纳3问题,php,model-view-controller,orm,kohana,Php,Model View Controller,Orm,Kohana,我已经通过几个网站(包括这一个),不幸的是,作为一个科哈纳新手,我仍然无法让这个工作。数据关系相当简单,我有一个公司记录,应该链接到一个状态记录和一个类型记录。当然,表中会有多个公司,但每个公司只允许链接到其中的一个(并且必须是) 我得到的是: class Model_Company extends ORM { protected $_has_one = array( 'companystatus' => array('model' => 'companyst

我已经通过几个网站(包括这一个),不幸的是,作为一个科哈纳新手,我仍然无法让这个工作。数据关系相当简单,我有一个公司记录,应该链接到一个状态记录和一个类型记录。当然,表中会有多个公司,但每个公司只允许链接到其中的一个(并且必须是)

我得到的是:

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')
            ,
        );
    }

?>
问题是,我没有为公司的companystatus和companytype属性返回任何内容,当我执行$company->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

这里有一些事情我会尝试改变

首先,为了可读性,大多数人在外键中使用下划线。因此,我建议不要使用
entryid
,而是使用
entry\u id
(您必须在数据库和代码中进行更改)

在Kohana 3中,当密钥与模型名称相同时,在
$has\u one
数组中声明
'model'=>'companystatus'
是多余的。您可以安全地删除该部分

但实际上,这都是您的问题的附带问题,它存在于最后一次ORM调用和数据库之间。(我在这里假设
hasbeendelete
company
表中的一列,而不是您提到的其他两个表中的任何一个。如果不是这样,请告诉我。)

如果将
->where('id','=',1)
->find()
一起执行,那么您确实希望返回数据库中存在的一个公司记录。我建议单独检查
是否已删除

说到这里,与其命名变量
$companys
,它实际上应该是单数的(例如
$company
),因为它只保存一条记录

您可以将
ORM::factory('company')->where('id','=',1)
简化为
ORM::factory('company',1)

如果您确定存在数据库ID为1的公司,则以下代码应返回该记录:

$myCompany=ORM::工厂('company',1)

然后,如果(!$myCompany->hasbeendeletted),您可以执行类似于
的操作。


那应该对你有点帮助。如果遇到麻烦,请发布更多详细信息。

这里有几点我会尝试改变

首先,为了可读性,大多数人在外键中使用下划线。因此,我建议不要使用
entryid
,而是使用
entry\u id
(您必须在数据库和代码中进行更改)

在Kohana 3中,当密钥与模型名称相同时,在
$has\u one
数组中声明
'model'=>'companystatus'
是多余的。您可以安全地删除该部分

但实际上,这都是您的问题的附带问题,它存在于最后一次ORM调用和数据库之间。(我在这里假设
hasbeendelete
company
表中的一列,而不是您提到的其他两个表中的任何一个。如果不是这样,请告诉我。)

如果将
->where('id','=',1)
->find()
一起执行,那么您确实希望返回数据库中存在的一个公司记录。我建议单独检查
是否已删除

说到这里,与其命名变量
$companys
,它实际上应该是单数的(例如
$company
),因为它只保存一条记录

您可以将
ORM::factory('company')->where('id','=',1)
简化为
ORM::factory('company',1)

如果您确定存在数据库ID为1的公司,则以下代码应返回该记录:

$myCompany=ORM::工厂('company',1)

然后,如果(!$myCompany->hasbeendeletted),您可以执行类似于
的操作。


那应该对你有点帮助。如果您遇到麻烦,请发布更多详细信息。

谢谢,从清洁的角度来看,您的评论非常好。然而,问题是,当我将关系设置为我的原始帖子时,我没有得到CompanyStatus或CompanyType记录。这是我的问题。我希望Kohana ORM能帮我解决这个问题,而不是做3个DB调用(公司,然后是状态和类型记录)。@Dominik你有
$吗?你的
Model\u CompanyStatus
Model\u CompanyType
中设置了很多
来将它们链接到
Model\u company
?(我假设您正在尝试实现状态/类型和公司之间的一对多关系。)您好(再次感谢您抽出时间),是的,我确实在Model_CompanyStatus和Model_CompanyType文件中有$_has_many。当我调用ORM方法获取单个公司时,是否需要调用以获取关联的公司类型和状态?我尝试了$company->companystatus->find();,但是,这不会返回基于公司记录的值,它似乎只是获取第一条记录,或者仅在视图中显示第一条记录。@Dominik Hmmm。。。我必须查看
Model\u CompanyStatus
Model\u CompanyType
的代码(变量,不一定是任何方法),以便在这方面提供进一步的帮助。你能把这个加到你的问题上吗?此外,请更新其中的任何现有代码,以反映您在发布此问题后所做的任何更改。@Dominik我还需要对三个相关数据库表的重要部分(至少是表名、主键和您正在使用的任何其他部分)进行简要说明
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