【发布时间】:2016-11-17 19:55:53
【问题描述】:
试图获得一个范围设置,让我可以根据另一个模型(用户)中的列(名称)过滤一个模型(属性)。
我有一个关系设置到一个用户有许多属性,一个属性属于一个用户。
现在我已经尝试过了...
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 和 User 都有自己的表,其中包含地址、城市、州和邮政编码的列。只有 Property 有一个 full_address 列,我正在使用这样的访问器...
public function getFullAddressAttribute($value)
{
$address = $this->address;
$city = $this->city;
$state = $this->state;
$zipcode = $this->zipcode;
return $address.', '.$city.', '.$state.', '.$zipcode;
}
这两个都在属性模型中。由于某种原因,在使用此 filterByUser 过滤属性后访问 $property->full_address 时。full_address 会返回来自用户表而不是属性表的组合值。
我想知道最好的设置方法是什么,以便我可以按用户名称过滤属性。该属性确实有一个 user_id 列,但我希望根据用户名进行过滤。
如果我将所有属性地址字段重命名为 prop_address、prop_city 等,这一切都有效……但这并不理想。
有什么想法吗?我已经尝试了所有我能想到的。
【问题讨论】:
标签: laravel eloquent laravel-5.3