我知道我的题目真的很奇怪!我希望我能解释清楚。我有三个模型,Book、author和AutherType。我的表结构:
表书:
<表类>id 标题 tbody><<tr>1 book1 2book2 表类>
虽然不能对复杂的枢轴(belongsToMany关系)编写查询,但我们有两个选择:
- 首先(这是最简单的一个):获取写入器类型id并通过关系传递它,如:
public function writers()
{
$writer_id = AuthorType::where('title', 'writer')->first()->id;
return $this->authors()->wherePivot('author_type_id', $writer_id);
}
- 第二(繁重的选择),在
Author
模型中编写一个新方法,给出特定书籍的作者类型,然后在Book
模型中根据该书的类型筛选作者:
inAuthor.php
:
public function authorTypes()
{
return $this->belongsToMany('AppModelsAuthorType', 'author_book');
}
public function authorTypesForBook($book_id){
return $this->authorTypes()->wherePivot('book_id', '=' , $book_id);
}
和Book.php
:
public function writers()
{
$authors = $this->belongsToMany('AppModelsAuthor', 'author_book')->withPivot('author_type_id')->get();
$book_id = $this->id;
return $authors->filter(function ($item) use ($book_id){
return $item->authorTypesForBook($book_id)->get()->contains(function($value){
return $value->title == 'writer';
});
});
}
希望这对你有帮助。