Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel withCount()返回错误的值_Php_Laravel_Eloquent - Fatal编程技术网

Php Laravel withCount()返回错误的值

Php Laravel withCount()返回错误的值,php,laravel,eloquent,Php,Laravel,Eloquent,在我的应用程序中,有用户制作项目的图片。关系结构如下: 类别->子类别->项目->图片->用户 现在,在类别图片之间还有一个名为itemPics的快捷关系,因此用户上传的图片数量可以使用withCount()按类别快速计数 以下是类别模型上的关系: public function subcategories() { return $this->hasMany('App\SubCategory'); } public function items() { return $

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

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

现在,在类别图片之间还有一个名为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()给出的两个关系的相关模型数量在JSON输出中不同



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

此解决方案适用于我:

//...
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);

此处链接到有关Laravel withCount函数的更多信息

可能有助于显示模型中添加的关系方法(特别是项目和项目PIC)。请参见edit.withCount跟踪直到关系停止,它将忽略join子句,是否仅尝试获取图片数?withCount将立即与select子句一起生效,而with将与其他查询一起生效,因此您的join子句将不会被视为withCount。
$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);