2016-02-15 67 views
0

下面的查詢正常工作以檢索與其關聯的客戶端和用戶的所有約會。在laravel數據透視表上進行過濾的雄辯方式

$appointments = Appointment::with('client', 'user') 
    ->where('appointments.business_id', '=', \Auth::user()->business_id) 
    ->orderBy('appointments.start', 'ASC') 
    ->get(); 

會是什麼語法添加以下標準來選擇的約會:

where users.id = \Auth::user()->id 

我認爲,將下面的行會的工作,但事實並非如此:

->where('users.id', '=', \Auth::user()->id) 

謝謝

回答

0

因爲無法在約會表中找到users.id列你不能對它執行直接的where子句。 whereHas方法允許您將自定義約束添加到關係約束。請查詢https://laravel.com/docs/5.2/eloquent-relationships#querying-relations瞭解更多詳情。

$userId = \Auth::user()->id; 

    $appointments = Appointment::with('client', 'user') 
    ->whereHas('user',function($query) use($userId) 
    { 
    $query->where('users.id,'=',$userId); 

    }) 
    ->where('appointments.business_id', '=', \Auth::user()->business_id) 
    ->orderBy('appointments.start', 'ASC') 
    ->get(); 
+0

儘管此代碼可以解決這個問題,這將有助於解釋_how_或_why_此代碼的工作,什麼是比OP嘗試的不同。 – patricus

+1

Thanx @Patricus。增加了一點解釋。希望它能幫助別人。 – oseintow

+0

@oseintow非常好,謝謝!我添加了下面一行' - > whereHas('user',function($ q){$ q-> where('users.id','=',\ Auth :: user() - > id); \t} )'和完美的作品 – user3489502