我目前有API返回的以下json响应。我能用拉威尔的口才把它还给你。有几个用户,每个用户都有几个收据。收据具有类型和状态。我想尝试获取与类型和状态相关的每个收据的总金额。我能够使用
$this->user->with('receipts')->has('receipts')->get(['id', 'name']);
我尝试使用多个laravel集合方法https://laravel.com/docs/5.8/collections#available-methods但我仍然无法获得所需的响应。
{
"id": 1,
"name": "kent",
"receipts": [
{
"id": 1,
"user_id": 1,
"type_id": 1,
"status": 0,
"amount": 100
},
{
"id": 2,
"user_id": 1,
"type_id": 1,
"status": 0,
"amount": 100
},
{
"id": 3,
"user_id": 1,
"type_id": 2,
"status": 1,
"amount": 50
},
{
"id": 4,
"user_id": 1,
"type_id": 2,
"status": 0,
"amount": 30
},
{
"id": 5,
"user_id": 1,
"type_id": 2,
"status": 0,
"amount": 30
},
{
"id": 6,
"user_id": 1,
"type_id": 1,
"status": 0,
"amount": 20
},
{
"id": 7,
"user_id": 1,
"type_id": 1,
"status": 1,
"amount": 10
}
]
},
{
"id": 2,
"name": "allison",
"receipts": [
{
"id": 9,
"user_id": 2,
"type_id": 1,
"status": 0,
"amount": 20
}
]
}
]
我希望得到下面的答案
{
"id": 1,
"name": "kent",
"receipts": [
{
"performance and deleted": 220,
"performance and not deleted": 10,
"project and deleted": 60,
"project and deleted": 50
}
]
},
{
"id": 2,
"name": "allison",
"receipts": [
{
"performance and deleted": 20,
"performance and not deleted": 0,
"project and deleted": 0,
"project and not deleted": 0
}
]
}
]
我编写的脚本假设您的数据是PHP数组,因此您可以更改我代码的某些部分。例如,您可以更改:
$row['receipts']
// To
$row->receipts
反正
// The function in your controller
function index(){
$users=User::whereHas('receipts')->with('receipts')->get()->toArray();
return convert($users);
}
// The helper function
function convert($data){
$data=collect($data);
$allTypes=[];
$allStatuses=[];
return $data->each(function($row) use (&$allTypes,&$allStatuses){
$types=collect($row['receipts'])->pluck('type_id')->toArray();
$statuses=collect($row['receipts'])->pluck('status')->toArray();
$allTypes=array_unique(array_merge($allTypes,$types));
$allStatuses=array_unique(array_merge($allStatuses,$statuses));
})->map(function ($row,$index) use (&$allTypes,&$allStatuses){
$result=[];
$receipts=collect($row['receipts']);
foreach ($allTypes as $type){
foreach ($allStatuses as $status){
$result["type_id {$type} and status {$status}: "]=$receipts->where('type_id',$type)->where('status',$status)->sum('amount');
}
}
$row['receipts']=$result;
return $row;
});
}
您可以使用Foreach和其他循环来制作您想要的json!使用此函数将您的集合转换为您想要的json:
public function convert(Collection $collection)
{
$result_collection = $collection;
$payment_collections = [];
foreach ($result_collection->receipts as $receipt)
{
$payment["type_id${receipt->type_id} and status${$receipt->status}"] = $receipt->amount;
}
$result_collection->receipts = $payment_collections;
return $result_collection;
}
这和计算总量的方法是一样的。只需放置一个foreach并将每个金额添加到一个初始化为0的变量中;
还有其他方法,比如在资源集合中更改数组函数。
你应该能够得到的金额总和与
$this->user->with(['receipts' => function($query) {
$query->selectRaw("SUM(amount) as amount, type_id, status, user_id")->groupBy('type_id', 'status', 'user_id');
}])->has('receipts')->get(['id', 'name']);
您可以使用收集方法来获得所需的输出
$this->user->with(['receipts' => function($query) {
$query->selectRaw("SUM(amount) as amount, type_id, status, user_id")->groupBy('type_id', 'status', 'user_id');
}])->has('receipts')->get(['id', 'name'])
->each(function ($user) {
$user->setRelation(
'receipts',
$user->receipts->mapWithKeys(function ($receipt) {
return [
$receipt->type_id . ' and ' . $receipt->status => $receipt->amount // format the key as you wish
];
})
);
})
我正在用Laravel 5.2开发一个Web应用程序,但有一个问题我无法解决。 我有一个扩展了雄辩模型的模型,但当我试图输出带有“where”的数据库表时,例如 它返回一个包含许多信息的集合,这些信息此时对我来说无用,比如“守卫”、“键入”...我的表的数据在“属性”下。遵循laravel的指南,我看到每个人都像我一样简单地使用它,然后用
问题内容: 我试图在Eloquent和Laravel中找到一种优雅的方式来表达 在Eloquent中是否存在一个between运算符(我找不到它)。 我到目前为止最接近的是像这样链接我的查询 我还遇到了似乎可行的地方 是否有处理范围的实际口才方法(不是原始方法)? 问题答案: 在这里查看:http : //laravel.com/docs/4.2/queries#selects 对于Laravel
如何在不使用查询生成器的情况下,在Laravel4中创建一个新的雄辩的集合? 有一个方法,它可以被不真正起作用的方法覆盖,因为它只在查询集合结果时使用。 我在考虑建立一个空的集合,然后用有说服力的对象填充它。我不使用数组的原因是因为我喜欢雄辩的集合方法,比如。 如果还有其他选择,我很乐意听听。
我正在编写php代码,对于当前的项目,我正在使用laravel框架(带有雄辩的ORM)。在这个项目中,我创建了两个表:用户和任务。我想在这些表之间创建一个“一对多”的关系。因此,一个用户可以有许多任务。在Tasks类中,我创建了方法所有者(): 但是当我以前得到用户名的时候 我得到这个异常:未定义的属性:illumb\Database\Eloquent\Relations\BelongsTo::$
这可能是一个无关紧要的问题,但我想知道Laravel是否推荐某种方法来检查从
我一直试图找出一种方法来记录SQL查询从雄辩的ORM,我在Zend框架1中使用。我遇到了这样调用的getQueryLog()方法: 我发现Illumb\Database\Connection包含getQueryLog()方法,因此我尝试执行以下操作: 但是,我得到以下通知,它返回NULL: 有人能建议我在拉威尔以外的地方怎么用这个吗?我在网上搜索过,看不到任何需要改变的地方,尽管我怀疑大多数例子都