表项目:
project_id (int)
requestor_id (uuid)
表请求者:
requestor_id (uuid)
模型项目:
public function requestor() {
return $this->hasOne('App\Models\Requestor', 'requestor_id', 'requestor_id');
}
模型请求者有一种方法:
// this method return object users info from ldap
public function getLdapAttribute() {
$ldapWrapper = new LdapWrapper();
return $ldapWrapper->checkIfUuidExists($this->requestor_id, true);
}
选择所有具有请求者关系的项目:
$query = (new Project)->newQuery()->with(['requestor'])->get();
问题是: 如何选择具有请求者关系的所有项目,以及如何在每个请求者对象的调用方法getLdapAttribute上将其全部返回为一个对象?
非常感谢:)
答案 0 :(得分:0)
由于未指定getLdapAttribute
方法的SQL查询,因此我们可以先获取项目,然后遍历并获取该属性。
如果给出了getLdapAttribute
的SQL查询,那么我们可以在一个查询中获取所有数据(这里我们在获取项目的第一个查询之后获得属性)。
$projects = Project::with(['requestor'])
->get()
->each(function ($project) {
$project->requestor->getLdapAttribute();
});
答案 1 :(得分:0)
您可以将“ Ldap”属性的名称放在App \ Requestor类的$ appends数组中,而Eloquent会自动将名为ldap的属性附加为getLdapAttribute方法返回的值。
Link to the Official Laravel Documentation for this Eloquent feature !