2017-09-25 70 views
1

我有一個User模型,其中包含登錄名,ID,年齡等屬性。例如,另一個表格是user_data,其中residence列。如何通過匹配關係值來獲取Laravel模型?

我該如何獲得所有使用特定住所的用戶?我有這樣的:

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()

+0

做一個SQL squery得到它:https://laravel.com/docs/5.5/queries – Peter

+0

@peter當你看到上面我試了很多次,但它不會w ork – browinski

回答

1

使用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::inCity($request->city)->get(); 
+0

這是有效的。但如何將華沙改爲$ request-> city? 我有$ request作爲函數參數put id現在不工作 – browinski

+0

已更新爲顯示此示例! –

+0

還有最後一個問題。我無法做類似$ user-> id的事情,因爲: 此收集實例上不存在屬性[id] 如何正確執行此操作? – browinski

0

使用whereHas:在User模型,添加這個方法:

function scopeInCity($query, $city) 
{ 
    return $query->whereHas('user_data', function($q) use ($city) { 
     $q->where('residence', $city); 
    }); 
} 

然後,您可以按城市過濾所有用戶(在模型外)具有特定屬性的,像這樣:

$users = User::whereHas('user_data', function($q) { 
$q->where('residence', 'Warsaw');})->get(); 
相關問題