2017-01-05 8 views
1

私はリストとユーザーの関係が多岐にわたります。 これはリストのモデルである:Laravel 5 - Eloquent:多対多の関係をフィルタリングする簡単な方法

class ListModel extends Model 
{ 
    protected $table = "lists"; 

    public function users() 
    { 
    return $this->belongsToMany('App\Models\User', 'list_user', 'list_id', 'user_id')->withTimestamps(); 
    } 

} 

これは、Userモデルである:リストページで

class User extends Authenticatable 
{ 

    public function lists() 
    { 
    return $this->hasMany('App\Models\ListModel'); 
    } 
} 

、私がログインしているユーザーに属するすべてのリストを取得する必要があります。私が見つけた唯一の解決策はこれです:

$user = \Auth::user()->id; 
$all_lists = ListModel::whereHas('users', function ($query) use ($user) { 
    $query->where('user_id', $user); 
})->active()->get(); 

同じ結果を達成するための簡単な方法はありますか?現在のユーザーがすでにロードされているので

+0

を/ laravel/how-to-eager-load-a-relation-on-authuser – Gayan

答えて

0

あなたのリスト()関係が正しく定義されていません。 belongsToManyの逆数はまだbelongsToMany(hasManyのの逆belongsToのである)である:

class User extends Authenticatable 
{ 

    public function lists() 
    { 
     return $this->belongsToMany('App\Models\ListModel', 'list_user', 'user_id', 'list_id')->withTimestamps(); 
    } 
} 

その後、あなたはこのようなリストを取得することができます。この便利なhttps://laracasts.com/discuss/channelsを発見

$user = \Auth::user(); 

$all_lists = $user->lists()->active()->get() 
+0

どうもありがとうございました。 – Dani

1

は、ユーザーのためのリストを読み込むためにlazy eager loadingを使用することができます。

auth()->user()->load('lists'); 
+0

私は試しましたが、ユーザのリストを返します。 – Dani

+0

@Daniこのコードはユーザのリストを返すことはできません。コードを変更したようです。今使用しているコードを正確に表示してください。 –

+0

私はちょうどこの正確なコードをテストし、多対多の関係のために完全に機能します。 –

関連する問題