更新Laravel Illuminate集合中的单个键值

时间:2018-09-27 01:39:36

标签: laravel collections laravel-5.5

我正在从Facebook API响应中构建一个集合。

$ads = new \Illuminate\Support\Collection;

if (!$ads->has($insight[$key])) {
    $ads->put($insight[$key], [
        'ad_id'                             => $insight[AdsInsightsFields::AD_ID],
        'ad_name'                           => $insight[AdsInsightsFields::AD_NAME],
        'ctr'                               => (float)$insight[AdsInsightsFields::CTR],
        'spend'                             => (float)$insight[AdsInsightsFields::SPEND],
    ]);
} else {
    // Increment spend value here.
}

如果这是一个数组,我会这样做:

$ads[$insight[$key]]['spend'] += $insight[AdsInsightsFields::SPEND];

如何在收藏夹上做到这一点?

3 个答案:

答案 0 :(得分:0)

$ads->{$insight[$key]}['spend'] +=  $insight[AdsInsightsFields::SPEND];

看起来有些奇怪,但是您需要以对象属性->propertyName的形式访问第一部分,该属性名称是您从数组$insight[$key]中获取的,因此您需要在括号周围加上括号,最后,您需要使用该属性的末尾带有[spend]的数组键。

答案 1 :(得分:0)

第一件事,这是数组的集合(而不是集合的集合)。

您的问题是如何在集合中获取特定的键值对,

答案是集合上的“ get()”函数。 现在您只需按如下所示增加“支出”值即可。

$ads->get($insight[$key])['spend'] += $insight[AdsInsightsFields::SPEND];

注意

如果您需要整个东西作为集合,请更新代码以如下所示收集集合

$ads->put($insight[$key],  collection([
    'add_id'                            => $insight[AdsInsightsFields::AD_ID],
    'ad_name'                           => $insight[AdsInsightsFields::AD_NAME],
    'ctr'                               => (float)$insight[AdsInsightsFields::CTR],
    'spend'                             => (float)$insight[AdsInsightsFields::SPEND],
]);

然后您可以按以下方式增加支出值。

$ads->get($insight[$key])->spend += $insight[AdsInsightsFields::SPEND];

答案 2 :(得分:0)

为解决这个问题,我编写了能够执行所需更新的宏。

/dev/media10

有了这个,我所要做的就是:

select regexp_replace(column_name, '[[:space:]]+', chr(32))  from table_name;

如果我只想设置一个值,无论键是否存在,我都可以这样做:

UPDATE table_name
SET column_name = REGEXP_REPLACE (column_name ,'[[:space:]]+',' ');