Laravel与自定义方法的关系

时间:2018-10-17 11:49:58

标签: sql laravel ldap relationship

表项目:

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上将其全部返回为一个对象?

非常感谢:)

2 个答案:

答案 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 !