首页 > 解决方案 > Laravel 7(带有分形)在使用 withCount 方法时不包括关系计数

问题描述

我是一个相对较新的 PHP 开发人员,所以我可能会弄错一些。

PHP:7.4 Laravel/Lumen:7.0 Fractal:0.13-dev(我认为)

我有一个模型,Programs

<?php

use Illuminate\Database\Eloquent\Model;

class Program extends Model
{
    public $guarded = ['id'];

    public function sites()
    {
        return $this->belongsToMany(Site::class, 'programs_sites');
    }
}

?>

与 有belongsToMany关系Sites

?>

<?php

use Illuminate\Database\Eloquent\Model;

class Site extends Model
{
    public $guarded = ['id'];
}

?>

我可以使用这个 ProgramController 方法:

public function index(Request $request) {
    $query = Program::withCount('sites')->whereClientId($request->get('client_id'));

    $products = $query->get();

    return $this->fractal->respondWithCollection($products, new ProgramTransformer);
}

使用以下 URL 从 API 返回嵌套关系:http://local:8081/ads/api/programs?client_id=130785&includes%5B0%5D=sites

{
    "data": [
        {
            "id": 817,
            "name": "Daugherty Ltd",
            "sites": [
                {
                    "id": 13,
                    "name": "MyDomain.com",
                },
            ],
        }
    ],
    "meta": {
        "count": 1
    }
}

当我删除includes查询参数时,sites块按预期下降。但是我的前端也需要嵌套关系的计数。我知道我可以简单地计算站点数组,但如果可能的话,我想从服务中获取它。

Laravel 文档表明有一个withCount“将{relation}_count在您的结果模型上放置一列”。但是,就我而言,它不起作用。当通过邮递员点击这个时,我希望在 Program 模型上看到一个额外的属性,"site_count": 1. 但我没有看到任何其他属性,也没有错误。

鉴于我对 PHP / Laravel 缺乏经验,我的第一个假设是我做错了什么,但我不知道它可能是什么。谁能提供我所缺少的洞察力?

标签: laraveleloquentthephpleague-fractal

解决方案


推荐阅读