Laravel withCount()返回错误的值

时间:2017-08-07 17:56:42

标签: php laravel eloquent

在我的应用程序中,用户制作图片 。关系结构如下:

类别 - > 子类别 - > 商品 - > 图片 - >的用户

现在,类别< - >之间还有一个名为 itemPics 的快捷关系。 图片,以便使用 withCount()按类别快速计算用户上传的图片数量。

这些是类别模型中的关系:

public function subcategories() 
{
    return $this->hasMany('App\SubCategory');
}

public function items()
{
    return $this->hasManyThrough('App\Item', 'App\SubCategory');
}

public function itemPics()
{
    return $this->hasManyThrough('App\Item', 'App\SubCategory')
    ->join('pictures','items.id','=','pictures.item_id')
    ->select('pictures.*');
}

我的问题 正在获取用户每个类别收集的图片数量。由withCount()创建的 itemPics_count 列始终与 items_count 具有相同的值,即使给出的两个关系的相关模型的数量()在JSON输出中有所不同。

        $authorPics = Category::with(['SubCategories', 'SubCategories.items' => function ($q) use ($author_id) {
                $q->with(['pictures' => function ($q) use ($author_id) {
                    $q->where('user_id', $author_id);
                }]);
            }])
        ->with('itemPics') /* added this to check related models in output */
        ->withCount(['items','itemPics'])
        ->get();
        dd($authorPics);

这对我没有意义。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

此解决方案对我有用:

//...
public function itemPics()
{
    return $this->hasManyThrough('App\Item', 'App\SubCategory');
}

然后您可以执行以下操作:

$authorPics = Category::with(['SubCategories', 'SubCategories.items' => function ($q) use ($author_id) {
      $q->with(['pictures' => function ($q) use ($author_id) {
         $q->where('user_id', $author_id);
      }]);
   }])
   ->with('itemPics') /* added this to check related models in output */
   ->withCount(['items','itemPics' => function($query){
      $query->join('pictures','items.id','=','pictures.item_id')
         ->select('pictures.*');
   }])
   ->get();
dd($authorPics);

https://laravel.com/docs/8.x/eloquent-relationships#counting-related-models处链接到有关Laravel withCount函数的更多信息