Laravel 7(带有Fractal)在使用withCount方法时不包括关系计数

时间:2020-10-09 16:52:12

标签: laravel eloquent thephpleague-fractal

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

PHP:7.4 Laravel /流明:7.0 分形: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');
    }
}

?>

belongsToManySites关系。

?>

<?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块会按预期放下。但是,我的前端也需要计数嵌套关系。我知道我可以简单地计算一个sites数组,但是如果可能的话,我想从服务中获取它。

Laravel文档指出有一个withCount,它“将在您生成的模型上放置一个{relation}_count列”。但是,就我而言,它不起作用。通过邮递员访问此程序时,我希望在程序模型"site_count": 1上看到一个附加属性。但是我没有看到任何其他属性,也没有错误。

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

0 个答案:

没有答案