试图获得一个范围设置,让我通过一个模型(属性),基于另一个模型(用户)中的列(名称)过滤。Laravel Scope使用不同的模型(有一种关系)
我有一个关系设置,用户有很多属性,属性属于一个用户。
现在,我已经试过这...
public function scopeFilterByUser($query, $user)
{
return $query->join('users', function($join) use ($user)
{
$join->on('properties.user_id', '=', 'users.id')
->where('name', 'LIKE', '%'.$user.'%');
});
}
其“作品”不同的是它打破我的属性模型访问器。
属性和用户都有自己的表格,包含地址,城市,州和邮编的列。只有物业有哪些我使用的是访问像这样的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表中返回组合值,而不是Property表。
我在想什么最好的方法是设置这个,所以我可以通过用户名过滤属性。该属性有一个user_id列,但我正在寻找基于用户名进行过滤。
如果我将所有属性地址字段重命名为prop_address,prop_city等等,这一切都可行......但这并不理想。
任何想法?我试过了我能想到的一切。
这非常有效!我发誓我在开始的时候尝试了一些如此接近的事情,一定是刚刚离开。这现在工作在循环和分页或任何东西。 – Octoxan
@Octoxan很高兴我可以帮忙:) – prateekkathal