Laravel依靠belongsToMany关系

时间:2018-05-15 08:43:30

标签: laravel laravel-5.6

在我的项目中我有两个模型:

内容:

class Contents extends Model
{
    protected $table = 'contents';
    protected $guarded = ['id'];

    public function categories()
    {
        return $this->belongsToMany(ContentCategories::class);
    }
}

和类别:

class ContentCategories extends Model
{
    protected $table = 'contents_categories';
    protected $guarded = ['id'];

    public function contents()
    {
        return $this->belongsToMany(Contents::class);
    }
}

在我的项目中,每个内容必须包含一个或多个类别,并且我希望通过此代码获取分配给类别的内容的数量:

$categories = ContentCategories::with('contents');
dd($categories->contents->count());

不幸的是我收到了这个错误:

"Undefined property: Illuminate\Database\Eloquent\Builder::$contents"

我该如何解决这个问题?感谢

2 个答案:

答案 0 :(得分:2)

您的$categories变量是一个集合,其中每个类别都有contents属性。因此,您可以对每个类别->contents->count()进行操作,但不能对整个集合进行操作。

如果你想要每个类别的计数,只需在你需要的时候在foreach循环中进行。

如果您想要与类别有关联的内容总数,那么有更好的方法:

Contents::has('categories')->count();

顺便说一句,我建议将模型重命名为单数,因为每个实例都是一个的东西,但这只是一个建议。

答案 1 :(得分:0)

您应该按如下方式对一个类别使用count:

$category = ContentCategories::find($id);
$category->contents()->count();

请注意内容之后的(),以SQL级别计算!

为什么呢?简而言之,

$categories->contents

相同
$categories->contents()->get()