尝试获取范围设置,让我根据另一个模型(用户)中的列(名称)筛选一个模型(属性)。
我有一个关系设置,用户拥有许多属性,属性属于用户。
现在我试过了......
JTable
除了在属性模型上破坏我的访问者外,“有效”。
Property和User都有自己的表,其中包含地址,城市,州和邮政编码的列。只有Property有一个full_address列,我正在使用这样的访问器......
public function scopeFilterByUser($query, $user)
{
return $query->join('users', function($join) use ($user)
{
$join->on('properties.user_id', '=', 'users.id')
->where('name', 'LIKE', '%'.$user.'%');
});
}
这两个都在Property模型中。出于某种原因,在使用此filterByUser过滤属性后访问$ property-> full_address时,full_address将返回User表中的组合值,而不是Property表。
我想知道设置它的最佳方法是什么,以便我可以按用户名称过滤属性。属性DOES有一个user_id列,但我希望根据用户名进行过滤。
如果我将所有属性地址字段重命名为prop_address,prop_city等,这一切都有效......但这并不理想。
有什么想法吗?我已经尝试了我能想到的一切。
答案 0 :(得分:0)
您可以尝试将范围更改为:
public function scopeFilterByUser($query, $user)
{
return $query->whereHas('users', function($q) use ($user) {
$q->where('name', 'like', '%' . $user . '%');
});
}
然后您可以将其用作
$properties = Property::filterByUser('name')->get();
// Then
$properties->first()->full_address
如果这不起作用,请在评论中告诉我们。)