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 的倒数仍然是 belongsToMany(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 回答