显示不完整结果的laravel急切加载

显示不完整结果的laravel急切加载,laravel,laravel-5.2,Laravel,Laravel 5.2,我在执行快速加载时遇到问题 有两张桌子 带栏目的服务 ser|U id | ser|U name | ser|U hr 带栏目的组织 组织id |服务id |组织名称|组织描述 服务和组织是1对1关系,即1个服务仅与1个组织相关 因此,在我的服务模型中,我编写了一个函数来显示这种关系 public function organization(){ return $this->hasOne('App\Organization','org_id'); } 现在在我的服务控制器中 我试

我在执行快速加载时遇到问题

有两张桌子

  • 带栏目的服务
  • ser|U id | ser|U name | ser|U hr

  • 带栏目的组织

    组织id |服务id |组织名称|组织描述

  • 服务和组织是1对1关系,即1个服务仅与1个组织相关

    因此,在我的服务模型中,我编写了一个函数来显示这种关系

    public function organization(){
        return $this->hasOne('App\Organization','org_id');
    }
    
    现在在我的服务控制器中

    我试图用急切的加载来构建雄辩的查询

    $services = Service::with('organization')->orderBy('ser_id','DESC')->get();
    
    当我转储结果时,一半的关联丢失,也就是说,当我显示带有组织的服务时,虽然它应该显示组织的详细信息,但在一半的结果中它丢失了

    所以我想知道为什么查询会获取某些服务的组织结果,而有些服务是空的

    是否有任何方法可以调试查询如何获取结果

    结果:

    [attributes:protected] => Array
                        (
                            [ser_id] => 6092
                            [ser_date] => 2018-03-18
                            [ser_hr] => 5
                            [ser_min] => 0
                            [std_id] => 362
                            [serty_id] => 4
                            [sers_id] => 3
                            [school_year] => 2016-08-23
                            [created_at] => 0000-00-00 00:00:00
                            [updated_at] => 0000-00-00 00:00:00
                            [adv_id] => 109
                            [flag] => 0
                        )
    
                    [original:protected] => Array
                        (
                            [ser_id] => 6092
                            [ser_date] => 2018-03-18
                            [ser_hr] => 5
                            [ser_min] => 0
                            [std_id] => 362
                            [serty_id] => 4
                            [sers_id] => 3
                            [school_year] => 2016-08-23
                            [created_at] => 0000-00-00 00:00:00
                            [updated_at] => 0000-00-00 00:00:00
                            [adv_id] => 109
                            [flag] => 0
                        )
    
                    [relations:protected] => Array
                        (
                            [organization] => 
                        )
    


    如您所见,我应该获得ser_id 6092的组织结果,但在查询中显示为空白。

    您的关系不太正确

    hasOne()方法的第二个参数是外键。也就是说,organizations表上连接两个表的字段。在这种情况下,该字段是
    seru-id
    ,而不是
    org-id

    更改第二个参数,您就可以开始了:

    public function organization()
    {
        return $this->hasOne('App\Organization', 'ser_id');
    }
    

    您的组织表具有来自服务表的外键
    seru id
    ,所以您应该在组织模型中定义关系,而不是在服务模型中定义关系

    在组织模式上,

    public function service(){
    return $this->hasOne('App\Service','ser_id');
    }
    
    在控制器中

    $data = Organization::with('service')->orderBy('org_id','DESC')->get();
    
    然后你可以像这样访问服务

    $data->service

    希望能有帮助