我的数据库中有三个表:Users
,Books
和Reading
。 Reading
的结构是:
id,user_id,book_id
现在,我需要访问用户正在阅读的所有图书。
首先,我想知道哪种关系,一对多,多对多,多对多等等。我需要在每个模型中指定什么?我的意思是,在用户模型hasMany('Reading')
或其他任何内容中。
我希望使用以下内容进行访问:Auth::user()->reading()->books()->get()
或类似内容。
答案 0 :(得分:1)
许多用户可以阅读一个User
可以阅读多本书而一个Book
的关系是Many-to-Many
关系。
因此,要在Laravel中定义这样的关系,您应该使用belongsToMany
方法:
class User extends Eloquent
{
function books()
{
return $this->belongsToMany("Book", "Reading", "user_id", "book_id");
}
}
class Book extends Eloquent
{
function users()
{
return $this->belongsToMany("User", "Reading", "book_id", "user_id");
}
}
$books = Auth::user()->books;
请注意,您不需要调用方法->books()
,但使用属性->books
,否则您必须像Auth::user()->books()->get()
一样调用它。