Laravel 模型关系:远程一对多
简单的说:Thread 模型可以通过 Author 模型访问多个的 Book 模型。
表结构
threads: id, title
authors: id, name, thread_id
books: id, name, author_id
模型配置
# App\Thread
hasManyThrough 方法的第一个参数是我们最终希望访问的模型名称,而第二个参数是中间模型的名称。
当执行关联查询时,通常会使用 Eloquent 约定的外键名。如果你想要自定义关联的键,可以通过给 hasManyThrough 方法传递第三个和第四个参数实现,第三个参数表示中间模型的外键名,第四个参数表示最终模型的外键名。第五个参数表示本地键名,而第六个参数表示中间模型的本地键名:
public function authorBook()
{
return $this->hasManyThrough('App\Book', 'App\Author');
}
# App\Thread
public function authorBooks()
{
return $this->hasOneThrough(
'App\Book',
'App\Author',
'thread_id', // 作者表外键
'author_id', // 书表外键
'id', // 帖子本地键
'id', // 作者本地键
);
}
使用
$books = \App\Thread::find(2)->authorBooks;
$threadsWithBooks = \App\Thread::with('authorBooks')->get();