我是一个相对较新的 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 缺乏经验,我的第一个假设是我做错了什么,但我不知道它可能是什么。谁能提供我所缺少的洞察力?