2016-08-21 30 views
1

我正在嘗試爲我的用戶構建搜索系統。根據關係的條件檢索所有用戶

第一部分很簡單,因爲我搜索的所有信息都在同一張表中。

第二部分涉及基於提供的IP地址搜索用戶。爲此,我正在使用:

$users = User::with(array('login' => function($q){ 
       $q->where('ip_address', Input::get('ipaddress')); 
      }))->paginate(10); 

但是,這是返回所有用戶,而不僅僅是那些符合IP地址要求的用戶。我哪裏錯了?還是有更簡單的方法來做到這一點?

+0

你想要的是'INNER JOIN'' – nCrazed

回答

2
$users = User::whereHas('login', function ($q) { 
    $q -> where('ip_address', Input::get('ipaddress')); 
}) -> paginate(10); 

試試吧!

+0

我剛剛找到'whereHas'並找出它。但這正是我做到的! – James

+0

它不是。當你使用'with()' - 你的where條件返回包括'login'的所有用戶,並且如果登錄關係不符合條件 - 它將被包含爲'null'實體。但是當你使用'whereHas'時 - 它通過關係條件過濾用戶 –