【问题标题】:Laravel withCount() returns wrong valueLaravel withCount() 返回错误值
【发布时间】:2017-08-07 17:56:42
【问题描述】:

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

类别 -> 子类别 -> 项目 -> 图片 -> 用户 >

现在,categories pictures之间还有一个叫做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 相同的值,即使 with() 给出的两种关系的相关模型的数量 em> 在 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);

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

【问题讨论】:

  • 可能有助于显示模型中的关系方法(特别是项目和 itemPics)
  • 已添加关系。见编辑。
  • withCount 跟踪直到你的关系停止,它忽略了 join 子句,你试图只获取图片的数量吗?
  • withCount 立即与您的 select 子句一起使用,而 with 与另一个查询一起使用,因此您的 join 子句不会被 withCount 处理。

标签: php laravel eloquent


【解决方案1】:

这个解决方案对我有用:

//...
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 函数的更多信息

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2021-01-01
    • 2017-03-01
    • 2020-01-30
    • 2020-05-29
    相关资源
    最近更新 更多