I'm a relatively new PHP developer, so I might get some of this wrong.
PHP: 7.4 Laravel/Lumen: 7.0 Fractal: 0.13-dev (I think)
I have a model, Programs.
<?php
use Illuminate\Database\Eloquent\Model;
class Program extends Model
{
    public $guarded = ['id'];
    public function sites()
    {
        return $this->belongsToMany(Site::class, 'programs_sites');
    }
}
?>
which has a belongsToMany relationship with Sites.
?>
<?php
use Illuminate\Database\Eloquent\Model;
class Site extends Model
{
    public $guarded = ['id'];
}
?>
I'm able to use this ProgramController method:
public function index(Request $request) {
    $query = Program::withCount('sites')->whereClientId($request->get('client_id'));
    $products = $query->get();
    return $this->fractal->respondWithCollection($products, new ProgramTransformer);
}
to return the nested relationship from the API with the following URL: 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
    }
}
When I remove the includes query param, the sites block drops off as expected. However my front end also needs counts of the nested relationships. I understand that I could simply run a count of the sites array, but I'd like to get it from the service if possible.
The Laravel docs indicate that there's a withCount which "will place a {relation}_count column on your resulting models". However, in my case it's not working. When hitting this via Postman I'd expect to see an additional property on the Program model, "site_count": 1. But I'm not seeing any additional properties, and no errors either.
Given my inexperience with PHP / Laravel my first assumption is that I'm doing something wrong, but I don't know what it might be. Can anyone offer insight into what I'm missing?