在我的控制器中,
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)
看看我能得到什么,但没有运气。
我最初的目标是内部加入User
和Others
表/模型。
我有这样的查询:
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还是新手。
答案 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