Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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 Kohana 3:从ORM模型获取相关数据_Php_Orm_Kohana - Fatal编程技术网

Php Kohana 3:从ORM模型获取相关数据

Php Kohana 3:从ORM模型获取相关数据,php,orm,kohana,Php,Orm,Kohana,当使用Kohana 3的ORM模型时,从相关模型的字段中获取数据的最佳方法是什么?例如,我有一名员工,他有一家公司,有许多任务。我将如何从公司模型和分配模型中的字段中获取数据(即,在has_-one和has_-many关系中) 编辑:根据要求,以下是有问题的模型 用户模型 class Model_User extends ORM { protected $_table_name = 'user'; protected $_primary_key = 'id'; prote

当使用Kohana 3的ORM模型时,从相关模型的字段中获取数据的最佳方法是什么?例如,我有一名员工,他有一家公司,有许多任务。我将如何从公司模型和分配模型中的字段中获取数据(即,在has_-one和has_-many关系中)

编辑:根据要求,以下是有问题的模型

用户模型

class Model_User extends ORM {
    protected $_table_name = 'user';
    protected $_primary_key = 'id';
    protected $_primary_val = 'username';
    protected $_has_many = array(
        'task' => array(
            'model' => 'task',
            'foreign_key' => 'user',
        ),
    );
    protected $_belongs_to = array(
        'company' => array(
            'model' => 'company',
            'foreign_key' => 'company'
        ),
    );
class Model_Task extends ORM {
    protected $_table_name = 'tasks';
    protected $_primary_key = 'id';
    protected $_primary_val = 'name';
    protected $_belongs_to = array(
        'project' => array(
            'model' => 'project',
            'foreign_key' => 'project'
        ),
        'user' => array(
            'model' => 'user',
            'foreign_key' => 'user'
        ),
    );
class Model_Company extends ORM {
    protected $_table_name = 'companies';
    protected $_primary_key = 'id';
    protected $_primary_val = 'name';
    protected $_has_many = array(
        'user' => array(
            'model' => 'user',
            'foreign_key' => 'company'
        ),
    );

}
任务模型

class Model_User extends ORM {
    protected $_table_name = 'user';
    protected $_primary_key = 'id';
    protected $_primary_val = 'username';
    protected $_has_many = array(
        'task' => array(
            'model' => 'task',
            'foreign_key' => 'user',
        ),
    );
    protected $_belongs_to = array(
        'company' => array(
            'model' => 'company',
            'foreign_key' => 'company'
        ),
    );
class Model_Task extends ORM {
    protected $_table_name = 'tasks';
    protected $_primary_key = 'id';
    protected $_primary_val = 'name';
    protected $_belongs_to = array(
        'project' => array(
            'model' => 'project',
            'foreign_key' => 'project'
        ),
        'user' => array(
            'model' => 'user',
            'foreign_key' => 'user'
        ),
    );
class Model_Company extends ORM {
    protected $_table_name = 'companies';
    protected $_primary_key = 'id';
    protected $_primary_val = 'name';
    protected $_has_many = array(
        'user' => array(
            'model' => 'user',
            'foreign_key' => 'company'
        ),
    );

}
公司模式

class Model_User extends ORM {
    protected $_table_name = 'user';
    protected $_primary_key = 'id';
    protected $_primary_val = 'username';
    protected $_has_many = array(
        'task' => array(
            'model' => 'task',
            'foreign_key' => 'user',
        ),
    );
    protected $_belongs_to = array(
        'company' => array(
            'model' => 'company',
            'foreign_key' => 'company'
        ),
    );
class Model_Task extends ORM {
    protected $_table_name = 'tasks';
    protected $_primary_key = 'id';
    protected $_primary_val = 'name';
    protected $_belongs_to = array(
        'project' => array(
            'model' => 'project',
            'foreign_key' => 'project'
        ),
        'user' => array(
            'model' => 'user',
            'foreign_key' => 'user'
        ),
    );
class Model_Company extends ORM {
    protected $_table_name = 'companies';
    protected $_primary_key = 'id';
    protected $_primary_val = 'name';
    protected $_has_many = array(
        'user' => array(
            'model' => 'user',
            'foreign_key' => 'company'
        ),
    );

}
来自控制器的代码抛出错误

$users = ORM::factory('user')->find_all();
$list = array();
foreach($users as $user) {
   $list[$user->id] = array(
     'username' => $user->username,
     'email' => $user->email,
     'company' => $user->company->name  //error:Trying to get property of non-object
   )
}

为了得到你想要的公司

$employee->company
$employee->company->assignments->find_all();
这样你就可以得到公司的财产了

$employee->company->property
为了得到你要做的任务

$employee->company
$employee->company->assignments->find_all();

您还可以在调用find_all()或find()之前链接其他查询方法,如->where()。

如果您的员工只能属于一家公司,则访问该公司的操作如下:

$company = $employee->company;
然后,您可以像访问任何其他型号一样访问
$company
属性(字段)

我相信你能接触到的关系深度是没有限制的,就这样做吧

$assignments $employee->company->assignments->find_all();
这是可能的。记下
find_all()您希望返回多条记录的位置

  • 对多种关系使用复数形式(有许多)。公司有很多用户,用户有很多任务等。这不是关键,但建议
  • users
    表中公司的列名是什么?似乎它是一家
    公司
    而不是
    公司id
    。如果是,则可以重命名此外键或关系名称

  • 我试过了,但公司是公司的ID,而不是公司本身。在构建员工模型以填充相关模型时,我需要做些什么吗?@GSto,您可以将您的Kohana模型添加到您的帖子中吗?啊,我看到了:model\u User中的“foreign\u key”=>“company”。外键和关系不能使用相同的名称。