访问Eloquent Relation中的父值

时间:2018-01-21 08:04:07

标签: php laravel eloquent

在我的控制器中,

User::find(1)->with('matches')->get()

在模型中,

public function matches()
{
    $userAge = $this->age; // Trying to access something like this

    return $this->hasMany('App\Others', 'location', 'location')
                ->selectRaw('*, ('.$userAge.' = age) as match');
}

如何访问用户的$this->age年龄?或者甚至可能吗?我已经尝试var_dump($this)看看我能得到什么,但没有运气。

我最初的目标是内部加入UserOthers表/模型。 我有这样的查询:

SELECT (a.age = b.age) as match
FROM user a 
LEFT JOIN others b ON a.location= b.location 
WHERE a.location = 'Somewhere' 

我知道我可以使用“查询”构建器轻松完成,但我认为如果我可以使用Eloquent / Relationships进行此操作会更好。

希望你们明白我的意思。

我在Laravel还是新手。

2 个答案:

答案 0 :(得分:1)

您可以在Eloquent模型上使用访问器和更改器。

public function getAgeAttribute () {
    // add custom query logic here
    ...
    return $queryResult->age;
}

然后,您的用户模型可以将其age属性作为实例访问:

$user->age

或在模型本身内:

$this->age

https://laravel.com/docs/5.5/eloquent-mutators#accessors-and-mutators

无论何时在以get开头并以Attribute开头的模型上命名函数,您都可以创建一个mutator,它允许定义自定义属性或修改从现有属性返回的内容。

答案 1 :(得分:1)

你弄错了。这种关系应该是这样的:

public function matches()
{
    return $this->hasMany('App\Others', 'location', 'location');
}

然后让用户获得相关匹配:

$user = User::with('matches')->find(1);

然后您就可以访问用户的年龄并匹配:

User is {{ $user->age }} years old
@foreach ($user->matches as $match)
    {{ $match->id }}
@endforeach