我对Eloquent很陌生,而且我遇到了一些问题。
基本上我有一张桌子,我递归地从同一张桌子里抓住孩子。
public function children() {
return $this->hasMany(static::class, 'parent_org_id');
}
public function childrenRec()
{
return $this->children()->with('childrenRec');
}
其中childrenRec是基于'parent_org_id'
对所有孩子的递归调用我在静态函数中从以下方法调用它,截至目前我只想要组织和组织 组织
self::select('id','name_en')->where('parent_org_id','=',0)->with('childrenRec')->get()->toArray();
抓住顶级组织(我的顶级组织的 parent_org_id 为0)。
我的问题是,在递归抓取的孩子中,它不会将其限制为 id 和 name_en
我的问题归结为: 如何从递归子调用中仅选择某些列,这是“正确”的做事方式吗?
我的返回数组看起来像这样。
array:1 [▼
0 => array:4 [▼
"id" => 1
"name_en" => "Org Unit"
"org_type" => null
"children_rec" => array:2 [▼
0 => array:27 [▼
"id" => 2
"name_en" => "My First Orgunit."
"code" => null
"abbreviation" => null
"address1" => "222 Street Street"
"address2" => null
"city_id" => 1
"province_id" => 14
"postalcode" => "C161L7"
"country_id" => 38
"contact_name" => null
"contact_title" => null
"email" => "test@test.com"
"fax" => "902-555-5555"
"phone1" => "5125125125125"
"phone2" => null
"org_type_id" => 1
"parent_org_id" => 1
"ref_id" => 79
"has_users" => 1
"created_at" => "2016-11-02 18:47:55"
"updated_at" => "2016-11-02 18:47:55"
"org_type" => array:4 [▶]
"children_rec" => array:1 [▶]
]
1 => array:27 [▶]
]
]
]
提前致谢。
答案 0 :(得分:1)
要在with()
方法中访问关系查询,可以使用以关系名称作为键的数组,并使用注入了查询构建实例的close。我需要永远跟踪解决方案的一个“问题”是,您的父查询和子查询需要包含关联其关系的密钥,因为在使用定义的列分别运行两个查询之后附加关系在模型的关系。在你的情况下,它将是:
self::select('id','name_en')
->where('parent_org_id','=',0)
->with(['childrenRec' => function($query) {
return $query->select('id', 'name_en', 'parent_org_id');
}])
->get()
->toArray();
如果未在子查询中包含parent_org_id
,则不会附加关系。
答案 1 :(得分:0)
试试这个:
public function childrenRec()
{
return $this->children()->with(['childrenRec' => function($query){
$query->select('id','name_en');
}]);
}