我有一个像下面这样的 laravel 集合:
[
{
"id":2,
"name":"Product 1",
"awards":[
{
"id":1,
"name":"Award 1",
"pivot":{
"product_id":2,
"award_id":1
}
},
{
"id":2,
"name":"Award 2",
"description":"Quae sint vero id iste.",
"pivot":{
"product_id":2,
"award_id":2
}
},
{
"id":3,
"name":"Award 3",
"pivot":{
"product_id":2,
"award_id":3
}
},
]
},
{
"id":3,
"name":"Product 2",
"awards":[
{
"id":2,
"name":"Award 2",
"pivot":{
"product_id":3,
"award_id":12
}
},
{
"id":3,
"name":"Award 3",
"pivot":{
"product_id":3,
"award_id":13
}
},
{
"id":14,
"name":"Award 4",
"pivot":{
"product_id":3,
"award_id":14
}
},
]
}
]
有没有办法让我得到像下面这样的合集,所有奖项,没有重复:
"awards":[
{
"id":1,
"name":"Award 1",
"pivot":{
"product_id":2,
"award_id":1
}
},
{
"id":2,
"name":"Award 2",
"description":"Quae sint vero id iste.",
"pivot":{
"product_id":2,
"award_id":2
}
},
{
"id":3,
"name":"Award 3",
"pivot":{
"product_id":2,
"award_id":3
}
},
{
"id":12,
"name":"Award 2",
"pivot":{
"product_id":3,
"award_id":12
}
},
{
"id":14,
"name":"Award 4",
"pivot":{
"product_id":3,
"award_id":14
}
},
]
我知道 Laravel 集合类有许多方法(如过滤器等),但我正在努力让它们“跨对象”工作——例如这里我有两个我几乎想要的对象
combine('awards')->unique()
...类似的东西。
编辑
我得到的初始数组非常简单,一个盒子包含许多产品,这些产品有奖励,所以我想说,这个盒子共有 x、y、z 奖励。不管怎样,这里是查询(上面是return $box
的结果):
$box = Box::with('products.awards')->find($id);
最佳答案
有一种非常简单的方法。
$awardsArray = $products->lists('awards');
$awardsDirty = new Collection($awardsArray);
$awards = $awardsDirty->unique();
关于laravel - 过滤不重复的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27707204/