假设我有这些模块:
还有那些关系:
Coupon 有很多 Order.Order 有很多 Item.到现在为止还挺好.
现在我想总结属于优惠券订单的商品的价格.所以我想做这样的事情:
Coupon::orders->items->sum('price');
Run Code Online (Sandbox Code Playgroud)
好吧,它不起作用,因为orders()方法返回一个Collection关系:
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function orders()
{
return $this->hasMany(Order::class);
}
Run Code Online (Sandbox Code Playgroud)
我收到的错误是item财产受到保护.我发现它与我的Item模块无关,只是因为Collection有protected $items = [];.
所以,当我清理了一些事实,我的问题/问题是,我如何求和items->price的orders属于Coupon?
当然,我可以像这样做一个foreach循环来实现我的目标:
$price = 0;
foreach (Coupon:orders as $order)
$price += $order->items->sum('price');
return $price;
Run Code Online (Sandbox Code Playgroud)
但我正在寻找一个更清洁的解决方案.任何人?
我正在使用集合过滤数据.但我需要使用类似的方法.我曾试图这样写:('name', 'LIKE', '%value%')但它没有用.
这是我的方法:
protected function filterData(Collection $collection, $transformer) {
foreach (request()->query() as $query => $value) {
$attribute = $transformer::originalAttribute($query);
if (isset($attribute, $value)) {
$collection = $collection->where($attribute, $value);
}
}
return $collection;
}
Run Code Online (Sandbox Code Playgroud) 我试图使用 laravel 的 diff 函数来获取两个集合之间的差异,但不知道为什么它总是返回 0 个差异项,尽管 $col1 包含 6 个项目,$col2 包含 5 个项目,我的代码:
$col1=collect([$data['result']->items()]);
$col2=collect([$data['erp_data']]);
$diff=$col1->diff($col2);
dd($col1,$col2,$diff);
Run Code Online (Sandbox Code Playgroud)
它返回
需要帮助,谢谢。
我有这样一个数组,如何分组date并合并每个组?
$input = [
[
'date' => '2018-09-25',
'foo' => 'value1',
],
[
'date' => '2018-09-25',
'bar' => 'value2'
],
[
'date' => '2018-09-26',
'baz' => 'value3'
]
];
Run Code Online (Sandbox Code Playgroud)
最终结果是这样的:
[
[
'date' => '2018-09-25'
'foo' => 'value1'
'bar' => 'value2'
],
[
'date' => '2018-09-26'
'baz' => 'value3'
]
]
Run Code Online (Sandbox Code Playgroud) 我有一个这样的json被我的模型检索:
[
{
"type": "seat",
"number": 4
},
{
"type": "seat",
"number": 8
},
{
"type": "seat",
"number": 12
},
{
"type": "seat",
"number": 16
}
]
Run Code Online (Sandbox Code Playgroud)
但是由于我正在使用的API编写的代码很少,我需要让上面的json看起来代替:
{
"4" : [ "{\"number\":\"4\",\"type\":\"seat\"}" ],
"8" : [ "{\"number\":\"8\",\"type\":\"seat\"}" ],
"12" : [ "{\"number\":\"12\",\"type\":\"seat\"}" ],
"16" : [ "{\"number\":\"16\",\"type\":\"seat\"}" ]
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何将第一个示例转换为使用laravel中的集合的第二个示例.
我正在开发一个使用 Laravel 5.8 的小型应用程序作为狗收容所。
\n\n我的 Dog 模型中有一个查询,它检索我感兴趣的狗品种:
\n\npublic function getBreeds()\n {\n return $collection = DB::table(\'dogs\')->whereIn(\'name\', [\'Breed1\', \'Breed2\', \'Breed3\', \'Breed4\'])->get();\n }\nRun Code Online (Sandbox Code Playgroud)\n\n我得到了一个包含大约 100 个项目的集合,如下所示:
\n\nCollection {#373 \xe2\x96\xbc\n #items: array:100 [\xe2\x96\xbc\n 0 => {#380 \xe2\x96\xbc\n +"id": 1792\n +"join_date": "2019-03-21 07:40"\n +"name": "Breed1"\n +"age": 9.3\n }\n 1 => {#382 \xe2\x96\xbc\n +"id": 1801\n +"join_date": "2019-03-21 09:35"\n +"name": "Breed2"\n +"age": 29.1\n }\n 2 => {#372 \xe2\x96\xbc\n +"id": 1803\n +"join_date": "2019-03-21 14:10"\n +"name": "Breed3"\n +"age": 60.9\n }\n 3 => {#385 \xe2\x96\xbc\n +"id": …Run Code Online (Sandbox Code Playgroud) 我有一个有 3 列的表id, sub_id, name。这是一个相当大的表,并且有一些重复项。
检测重复项以便将其删除的最佳方法是什么?
我尝试了这个,但它返回了所有内容(我猜认为 ids 使它们变得不唯一)
$collection = \App\MyModel::all();
$colUnique = $collection->unique(['name', 'sub_id']);
$dupes = $collection->diff($colUnique);
Run Code Online (Sandbox Code Playgroud)
name我想要获得具有相同和 的模型sub_id。
id sub_id name
1 2 John
2 2 John <- duplicate
3 2 Robin <- unique
Run Code Online (Sandbox Code Playgroud)