我有一个User
模型,其中包含登录,ID,年龄等属性。例如,另一个表格为user_data
,其中包含residence
列。
如何让所有具有特定住所的用户?我有这个:
User
型号:
public function user_data()
{
return $this->hasMany('App\Models\UserData');
}
public function FilterUser($request)
{
if ($request->has('city'))
{
$users = User::with('user_data')->where('residence', 'Warsaw')->get();
}
dd($users);
}
UserData
型号:
public function user()
{
return $this->belongsTo('App\User', 'user_id');
}
现在我收到了这个错误:
未找到专栏:1054未知专栏'住所'在' where子句' (SQL:select * from`users`,其中`residence` = warsaw,`users` .deleted_at`为null)
另一个问题:
如果User
是我的主要模特,我应该将其与上述关系联系起来吗? hasMany()
或belongsTo()
?
答案 0 :(得分:2)
使用whereHas()
查询构建器方法:
$users = User::with('user_data')
->whereHas('user_data', function($query) {
$query->where('residence', 'Warsaw');
})
->get();
编辑 - 要使用$request
中的值,您需要将变量导入whereHas()
的闭包中:
...
->whereHas('user_data', function($query) use ($request) {
$query->where('residence', $request->city);
})
...
编辑 - query scope可能是更好的方法。在User
模型中,添加此方法:
function scopeInCity($query, $city)
{
return $query->whereHas('user_data', function($q) use ($city) {
$q->where('residence', $city);
});
}
然后您可以按城市(模型外)过滤所有用户:
User::inCity($request->city)->get();
答案 1 :(得分:0)
如果您希望获得与特定属性具有关系的所有用户,请使用whereHas:
$users = User::whereHas('user_data', function($q) {
$q->where('residence', 'Warsaw');})->get();