如何通过匹配关系上的值来获取 Laravel 个模型?
How can I fetch Laravel models by matching a value on a relationship?
我有一个 User
模型,其中包含登录、ID、年龄等属性。例如,另一个 table 是 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');
}
现在我得到这个错误:
Column not found: 1054 Unknown column 'residence' in 'where clause' (SQL: select * from `users` where `residence` = warsaw and `users`.`deleted_at` is null)
还有一个问题:
如果User
是我的主要模型,我应该把它和上面的关系联系起来吗? hasMany()
或 belongsTo()
?
使用 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();
如果您想获取与特定属性有关系的所有用户,请使用 whereHas,如下所示:
$users = User::whereHas('user_data', function($q) {
$q->where('residence', 'Warsaw');})->get();
我有一个 User
模型,其中包含登录、ID、年龄等属性。例如,另一个 table 是 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');
}
现在我得到这个错误:
Column not found: 1054 Unknown column 'residence' in 'where clause' (SQL: select * from `users` where `residence` = warsaw and `users`.`deleted_at` is null)
还有一个问题:
如果User
是我的主要模型,我应该把它和上面的关系联系起来吗? hasMany()
或 belongsTo()
?
使用 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();
如果您想获取与特定属性有关系的所有用户,请使用 whereHas,如下所示:
$users = User::whereHas('user_data', function($q) {
$q->where('residence', 'Warsaw');})->get();