簡體   English   中英

如何通過匹配關系值來獲取Laravel模型?

[英]How can I fetch Laravel models by matching a value on a relationship?

我有一個User模型,該模型具有諸如登錄名,ID,年齡等屬性。另一個表是帶有residence列的user_data

如何獲得所有具有特定居住地的用戶? 我有這個:

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子句”中的未知列“ residence”(SQL:從“ users”中選擇*,其中“ residence” = warsaw,而“ users..deleted_at”為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);
    })
    ...

編輯- 查詢范圍可能是更好的方法。 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM