0

私は比較的新しい 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 docs は、「結果のモデルに列withCountを配置する」があることを示しています。{relation}_countただし、私の場合は機能しません。Postman 経由でこれをヒットすると、Program モデルに追加のプロパティが表示されると思います"site_count": 1。しかし、追加のプロパティは表示されず、エラーもありません。

私の PHP / Laravel の経験不足を考えると、私の最初の仮定は、私が何か間違ったことをしているということですが、それが何であるかはわかりません。私が欠けているものについて誰かが洞察を提供できますか?

4

0 に答える 0