标签: laravel-collection

通过其他关系,Laravel Eloquent sum的列

假设我有这些模块:

  • 优惠券
  • 订单(..,coupon_id)
  • 项目(...,order_id,价格)

还有那些关系:

  • 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模块无关,只是因为Collectionprotected $items = [];.

所以,当我清理了一些事实,我的问题/问题是,我如何求和items->priceorders属于Coupon


当然,我可以像这样做一个foreach循环来实现我的目标:

$price = 0;

foreach (Coupon:orders as $order)
    $price += $order->items->sum('price');

return $price;
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一个更清洁的解决方案.任何人?

php laravel eloquent laravel-collection

0
推荐指数
1
解决办法
3646
查看次数

Laravel 5.5 Collection喜欢的地方

我正在使用集合过滤数据.但我需要使用类似的方法.我曾试图这样写:('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)

php collections laravel-5 laravel-collection laravel-5.5

0
推荐指数
1
解决办法
4277
查看次数

Laravel Collection Diff 不返回两个集合之间的差异

我试图使用 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)

它返回

结果

需要帮助,谢谢。

php laravel laravel-collection

0
推荐指数
1
解决办法
5272
查看次数

Laravel 数组分组并合并每个组

我有这样一个数组,如何分组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)

arrays laravel laravel-collection

0
推荐指数
1
解决办法
3377
查看次数

转换Json数组

我有一个这样的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中的集合的第二个示例.

php json laravel laravel-collection

0
推荐指数
1
解决办法
73
查看次数

获取 Laravel 中每个不同项目名称的最小值和最大值的集合项目

我正在开发一个使用 Laravel 5.8 的小型应用程序作为狗收容所。

\n\n

我的 Dog 模型中有一个查询,它检索我感兴趣的狗品种:

\n\n
public function getBreeds()\n    {\n        return $collection = DB::table(\'dogs\')->whereIn(\'name\', [\'Breed1\', \'Breed2\', \'Breed3\', \'Breed4\'])->get();\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

我得到了一个包含大约 100 个项目的集合,如下所示:

\n\n
Collection {#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)

collections laravel laravel-collection

0
推荐指数
1
解决办法
3978
查看次数

Eloquent - 检测多列重复数据

我有一个有 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)

query-builder laravel eloquent laravel-collection

0
推荐指数
1
解决办法
5088
查看次数