1

リストとユーザーの間に多対多の関係があります。これはリストモデルです:

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

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

}

これはユーザーモデルです:

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

同じ結果を達成する簡単な方法はありますか?

4

2 に答える 2

1

現在のユーザーは既に読み込まれているため、遅延熱心な読み込みを使用してユーザーのリストを読み込むことができます。

auth()->user()->load('lists');
于 2017-01-05T12:59:01.267 に答える
0

lists() 関係が正しく定義されていません。belongsToMany の逆は、begsToMany のままです (hasMany の逆は belongsTo です)。

class User extends Authenticatable
{

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

次に、次のようなリストを取得できます。

$user = \Auth::user();

$all_lists = $user->lists()->active()->get()
于 2017-01-05T13:20:51.797 に答える