Laravel关系空无一人

时间:2016-03-07 18:18:37

标签: php laravel eloquent

我希望将所有书籍都归入某一类别。该类别有许多科目,书籍与科目相关联。

我的代码:

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。我做错了什么?

1 个答案:

答案 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

很难说没有看到你的数据库架构。