gpt4 book ai didi

php - Laravel + 分形 "deeply"嵌套包含

转载 作者:行者123 更新时间:2023-12-05 07:44:50 24 4
gpt4 key购买 nike

我正在使用分形 ( fractal.thephpleague.com ) 通过 Laravel ( laravel.com ) 开发 API。顺便说一句,这是一个了不起的图书馆。

在某些网络服务中,我需要返回几个嵌套模型的信息,这些模型有 3 层深。也就是说,我有一个 Survey 模型,它有很多 Survey Items,并且每个模型都有许多 Survey Item Results(每个用户)。好吧,我需要他们所有的数据,分类,即:

"surveys": [
{
"id": 1,
...,
"items": [
{
"id": 14,
...,
"results": [
{
"id": 45,
...
},
{
...
}
]
},
{
...
}
]
},
{
...
}
}

使用转换器和包含,我可以毫无问题地获得调查和调查项目信息,但我还需要调查项目结果...也就是说,我需要类似2-level“嵌套”的东西来获取third 级别的信息。

到目前为止我最好的方法(只返回两个级别:调查和调查项目)。在我的 Controller 中:

return fractal() -> transform(
Survey::where(...),
new SurveyTransformer()
) -> include(['SurveyItems']) -> respond();

非常感谢任何帮助。提前致谢。

最佳答案

这是我通常做的事情

调查转换器

<?php
namespace App\Transformers;

use League\Fractal;
use App\Survey;

class SurveyTransformer extends Fractal\TransformerAbstract
{
/**
* List of resources possible to include
*
* @var array
*/
protected $availableIncludes = [
'items'
];

public function transform(Survey $survey)
{
return [
'id' => (int) $user->id,
];
}


/**
* Include Items
*
* @param App\Survey $survey
* @return League\Fractal\CollectionResource
*/
public function includeItems(Survey $survey)
{
$items = $survey->items;
if (!is_null($items)) {
return $this->collection($items, new ItemTransformer);
}
return;
}
}

元素转换器

<?php
namespace App\Transformers;

use League\Fractal;
use App\Item;

class ItemTransformer extends Fractal\TransformerAbstract
{
/**
* List of resources possible to include
*
* @var array
*/
protected $availableIncludes = [
'results'
];

public function transform(Item $item)
{
return [
'id' => (int) $user->id,
];
}


/**
* Include results
*
* @param App\Item $item
* @return League\Fractal\CollectionResource
*/
public function includeResults(Item $item)
{
$results = $item->results;
if (!is_null($results)) {
return $this->collection($results, new ResultTransformer);
}
return;
}
}

在我的基本 Controller 上

    /**
* get fractal tranformed data
* @param $resource
*/
protected function fractalResponse($resource, array $includes = [])
{
$manager = new Manager();
$manager->setSerializer(new DataArraySerializer()); //or what ever you like

if (sizeof($includes) == 0) {
$data = $manager->createData($resource)
->toArray();
} else {
$manager->parseIncludes($includes);
$data = $manager->createData($resource)
->toArray();
}
return $data;
}

然后

$resource = new \League\Fractal\Resource\Collection($survies, new SurveyTransformer);
$response_data = $this->fractalResponse($resource, ['items.results'])

关于php - Laravel + 分形 "deeply"嵌套包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42544841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com