2016-08-21 4 views
1

ユーザーの検索システムを構築しようとしています。関係の条件に基づいてすべてのユーザーを取得します。

私が探していたすべての情報が同じテーブルにあるので、これの最初の部分は簡単でした。

2番目の部分では、提供された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'を含むすべてのユーザをreturndし、ログイン関係が条件に合わない場合、 'null'エンティティのように含まれます。しかし、あなたが 'whereHas'を使うとき、それは関係条件によってユーザをフィルタリングします –

関連する問題