Database design Laravel 4-数据库设计

Database design Laravel 4-数据库设计,database-design,laravel-4,Database Design,Laravel 4,我有以下要求: 用户可以将书籍添加到收藏 集合有不同的类型(可能是模型):愿望列表、观察列表、偏好列表 Book可以是多种收集类型的一部分(例如,可以在愿望列表和观察列表中) 因此,到目前为止,我拥有的模型是:User和Book 我想以一种非常简单的方式接触这些关系,例如 $wishlist = $user->collections()->wishlist; $watchlist = $user->collections()->watchlist; 这两个变量应该包

我有以下要求:

  • 用户
    可以将
    书籍
    添加到收藏
  • 集合有不同的类型(可能是模型):愿望列表、观察列表、偏好列表
  • Book
    可以是多种收集类型的一部分(例如,可以在愿望列表和观察列表中)
因此,到目前为止,我拥有的模型是:
User
Book

我想以一种非常简单的方式接触这些关系,例如

$wishlist = $user->collections()->wishlist;
$watchlist = $user->collections()->watchlist;
这两个变量应该包含一组书籍


我还想访问不同的收藏,这样我可以计算出某本书在任何用户的愿望列表中出现了多少次。例如

$book = Book::find(1);
$wishlist_count = $book->collections()->wishlist->count();


如何对这些关系进行建模?

为每种类型设置数据透视表:

// You can call the relations pretty easily:
$user->booksWishlist; // collection of Book models

$book->usersWatchlist->count(); // get count on the Collection of User models
// or alternatively
$book->usersWatchlist()->count(); // get count() on SQL query on related users


// tables:
book_user_wishlist: user_id, book_id, .. (id, timestamps and whatever you need)
book_user_watchlist: user_id, book_id, .. (id, timestamps and whatever you need)
// and so on..

// --- Relations ---
// User model
public function booksWatchlist()
{
    return $this->belongsToMany('Book', 'book_user_watchlist'); 
}

public function booksWishlist()
{
    return $this->belongsToMany('Book', 'book_user_wishlist'); 
}

// Book model
public function usersWatchlist()
{
    return $this->belongsToMany('User', 'book_user_watchlist'); 
}

public function usersWishlist()
{
    return $this->belongsToMany('User', 'book_user_wishlist'); 
}

如果您需要更强大的..list模型,您可以为每个列表设置自定义透视模型,覆盖用户模型和书本模型上的newPivot()方法。

这很有效。非常感谢。一个小的、相关的后续问题:在
Book
模板中,如何检查用户是否在其收藏中拥有该书?例如,当书籍已经在用户的愿望列表中时,向div添加一个类。