如何显示与用户无关的所有图书。多对多的关系

时间:2018-03-22 20:39:54

标签: laravel eloquent

我的数据库中有3个表。用户,书籍和book_user book_user是一个数据透视表,用于管理用户和书籍之间的多对多关系。

我正确设置了Laravel关系,并且我能够在Laravel中使用以下内容显示与用户关联的所有书籍。

   $user = Auth::user();
  return response()->json($user->books()->get());

现在我正在尝试显示与特定用户无关的所有书籍。我已经挣扎了很长一段时间,似乎找不到有用的东西。任何提示将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果图书与用户无关,则不应尝试通过用户检索图书。而是使用书籍模型:

Book::whereDoesntHave('users', function ($q) {
      $q->where('id', \Auth::id());
})->get();

答案 1 :(得分:0)

如果您希望所有图书完全不属于任何用户,而不是所有不属于特定用户的图书,您可以执行以下操作:

$books = Book::whereDoesntExists(function($query) {
    $query->select('book_user.id_book')
          ->from('book_user')
          ->where('book_user.id_book', '=', 'books.id');
    // Assuming that the columns on the pivot table are 'id_book' and 'id_user' and the primary key is 'id' in the 'books' table.
});

在这里,您可以在book_user数据透视表的id_book列中获取所有未拥有其ID的图书。基本上,所有书籍都不属于任何用户。