我现在正在调用几个嵌套关系。但是我尝试做的是在一个数组中获得具有相同“measured_at”日期的所有列,而不是将它们分散。
我得到的结构的一个简单例子:
{
"id": 1,
"user_body_sizes": [
{
"id": 23,
"measured_at": "2023-04-04"
},
{
"id": 24,
"measured_at": "2023-04-04"
},
{
"id": 26,
"measured_at": "2023-03-14"
},
{
"id": 29,
"measured_at": "2023-03-14"
}
]
}
这就是我真正想要实现的:
{
"id": 1,
"user_body_sizes": [
[
{
"id": 23,
"measured_at": "2023-04-04"
},
{
"id": 24,
"measured_at": "2023-04-04"
}
],
[
{
"id": 29,
"measured_at": "2023-03-14"
},
{
"id": 26,
"measured_at": "2023-03-14"
}
]
]
}
所以基本上我希望具有相同“measured_at”日期的数据在同一个数组中。
所以在Laravel中,这是我现在获取数据的代码:
public function GetCustomerBodySize($customerId, $month, $year)
{
$customerUserId = Customer::findOrFail($customerId)['user'];
return CustomerBodySize::with([ 'customer_data.user_body_sizes.body_parts','customer_data.user_body_sizes' => function ($q) use ($month, $year){
$q->whereMonth('measured_at', '=', $month);
$q->whereYear('measured_at', '=', $year);
$q->orderBy('measured_at');
}])
->whereRelation('customer_data', 'id', $customerUserId)
->first();
}
以下是我的亲戚:
// This is in my CustomerBodySize model
function customer_data(){
return $this->belongsTo(User::class, 'customer');
}
function body_parts(){
return $this->belongsTo(BodyParts::class, 'body_part');
}
// This is in my User model
public function user_body_sizes(){
return $this->hasMany(CustomerBodySize::class, 'customer');
}
2条答案
按热度按时间oxf4rvwz1#
您可以使用
Laravel's
Collection的groupBy()
方法按measured_at
日期对user_body_sizes
进行分组1.我们首先使用
get()
而不是first()
使用给定过滤器fetching all
相关CustomerBodySize
记录1.然后用
groupBy()
方法将它们的measured_at
日期进行分组1.最后,我们使用
map()
返回一个数组,每个nested
数组包含共享相同measured_at date
的CustomerBodySize
记录。我们还使用values()
从resulting collection
中删除grouping keys
。1.如果没有匹配给定过滤器的记录,则返回
null
。修改代码在这里
nqwrtyyt2#