我希望将所有书籍都归入某一类别。该类别有许多科目,书籍与科目相关联。
我的代码:
class BookCategory extends Model {
public function subjects() {
return $this->hasMany('BookSubject', 'category_id', 'id');
}
public function getBooksAttribute() {
return Books::whereHas('subjects', function ($query) {
return $query->join('book_category', 'book_category.id', '=', 'book_subject.subject_id')
->where('book_category.id', $this->id);
})->get();
}
}
和我的图书模型:
class Books extends Model {
public function subjects() {
return $this->belongsToMany('BookSubject', 'book_by_subject', 'book_id', 'subject_id');
}
}
如果我这样做:
$cats = \App\Models\BookCategory::all();
foreach ($cats as $c) {
echo $c->books->count();
}
对于所有行,它总是返回0。我做错了什么?
答案 0 :(得分:1)
我认为问题出在你的子查询中:
return $query->join('book_category', 'book_category.id', '=', 'book_subject.subject_id')
->where('book_category.id', $this->id);
我非常确定book_subject.subject_id
应为book_subject.category_id
很难说没有看到你的数据库架构。