私は比較的新しい 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 の経験不足を考えると、私の最初の仮定は、私が何か間違ったことをしているということですが、それが何であるかはわかりません。私が欠けているものについて誰かが洞察を提供できますか?