Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过从结果中减去数字来计算嵌套关系和追加字段_Php_Arrays_Laravel_Eloquent_Relationship - Fatal编程技术网

Php 如何通过从结果中减去数字来计算嵌套关系和追加字段

Php 如何通过从结果中减去数字来计算嵌套关系和追加字段,php,arrays,laravel,eloquent,relationship,Php,Arrays,Laravel,Eloquent,Relationship,我有从数据库获取服务的示例查询: $services = City::select('id', 'name')->has('services') ->with([ 'services:id,title,description', 'services.reviews' ]) ->get()->each(function($city) { return $city->services->each(function($service) {

我有从数据库获取服务的示例查询:

$services = City::select('id', 'name')->has('services')
->with([
    'services:id,title,description',
    'services.reviews'
])
->get()->each(function($city) {
    return $city->services->each(function($service) {
        $service->setRelation('reviews', $service->reviews->take(3));
        return $service;
    });
});
这将返回一些json响应:

[
    {
        "id": 1,
        "name": "London",
        "services": [
            {
                "id": 2,
                "title": "Service title",
                "description": "Service description",
                "reviews": [
                    {
                        "id": 1,
                        "author": "John Doe",
                        "description": "Service review description"
                    }
                ]
            }
        ]
    }
]

默认情况下,我的案例中的每个服务都有3条评论。如何将剩余评论数附加到每个服务。为此,首先需要计算服务的评论总数并减去3,如果结果大于0,则将分配一个值,否则将分配一个值0。

尝试此操作可能有效

我加上的小计算可能会有用

offset()
计算并取3

$services=City::select('id','name')->has('services'))
->与([
'服务:id、标题、说明',
“服务。评论”
])->get()->每个函数($city){
返回$city->services->each(函数$service,$key){
$offset=$key*3;//所以得到3倍
$service->setRelation('reviews',$service->reviews->offset($offset)->take(3));
返回$service;
});
});

您是否尝试过使用count()的laravel
@KamleshPaul是的,我尝试过,但在我的案例中,它是计数所有评论,而不是连接嵌套关系服务