我在执行急切加载时遇到了问题。
有两个表
ser_id | ser_name | ser_hr
有列的组织
org_id | ser_id | org_name | org_desc
服务和组织是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的组织结果,但在查询中显示为空白。
答案 0 :(得分:1)
您的组织表具有来自服务表的外键ser_id
,因此您应该在组织模型中定义关系,而不是在服务模型中。
在组织模型中,
public function service(){
return $this->hasOne('App\Service','ser_id');
}
在您的控制器中
$data = Organization::with('service')->orderBy('org_id','DESC')->get();
然后您可以像这样访问服务
$data->service
希望它有所帮助。
答案 1 :(得分:0)
你们的关系不太对劲。
hasOne()方法的第二个参数是外键。也就是组织表上连接两个表的字段。在这种情况下,该字段为ser_id
,而不是org_id
。
更改第二个参数,你应该好好去:
public function organization()
{
return $this->hasOne('App\Organization', 'ser_id');
}