【问题标题】:Merging Collection if values are equals for a specific key with Laravel如果使用 Laravel 的特定键的值相等,则合并集合
【发布时间】:2018-08-25 14:59:38
【问题描述】:

我有 2 个不同的集合,看起来像这样

集合 1:

{typesession_id: 3, formation_id: 7, codeformation: "FR8", id: 3, nomformation: "Sécurité électrique", …}
{typesession_id: 3, formation_id: 8, codeformation: "FR8", id: 4, nomformation: "Sécurité incendie", …}

集合 2:

{datesession: "2018-03-15", debutsession: "08:30:00", finsession: "12:00:00", typesession_id: 1, title: "Gestes d'urgence - Soignant", …}
{datesession: "2018-03-16", debutsession: "08:30:00", finsession: "12:00:00", typesession_id: 3, title: "eLearning", …}
{datesession: "2018-03-17", debutsession: "08:30:00", finsession: "12:00:00", typesession_id: 3, title: "eLearning", …}

这两个集合有一个共同的关键...... 我正在尝试恢复 Collection 2 中与“typesession_id”键具有相同值的元素... 例如,如果我的集合 1 有 typesession_id 等于 1 和 2 的元素,我希望集合 2 的项目具有值 1 和 2。

我的 newCollection 应该是:

{typesession_id: 3, formation_id: 7, codeformation: "FR8", id: 3, nomformation: "Sécurité électrique", datesession: "2018-03-16", debutsession: "08:30:00", finsession: "12:00:00", title: "eLearning", …}
{typesession_id: 3, formation_id: 7, codeformation: "FR8", id: 4, nomformation: "Sécurité électrique", datesession: "2018-03-17", debutsession: "08:30:00", finsession: "12:00:00", title: "eLearning", …}


{typesession_id: 3, formation_id: 8, codeformation: "FR8", id: 3, nomformation: "Sécurité incendie",  datesession: "2018-03-16", debutsession: "08:30:00", finsession: "12:00:00", title: "eLearning", …}
{typesession_id: 3, formation_id: 8, codeformation: "FR8", id: 4, nomformation: "Sécurité incendie",  datesession: "2018-03-17", debutsession: "08:30:00", finsession: "12:00:00", title: "eLearning", …}

换句话说:我的第一个集合让我知道用户可以进行哪些培训……而我的第二个集合让我可以获得有关特定类型会话 (typesession_id) 可用会话的信息。我想要一个基于 typesession_id 的完整组合列表...

我试图在 Laravel 指南上自己弄清楚,但我并没有真正找到我的解决方案......

【问题讨论】:

  • 你能提供你想要达到的结果吗?
  • 我改变了我的问题,我希望现在更清楚......我需要基于键/值的组合......

标签: laravel collections


【解决方案1】:

我还没有测试过,但下面的代码可能会起作用:

$collection1 = $collection1->groupBy('typessesion_id');

$result = $collection2->map(function($item, $key) {
    $typesession_id = $item->typesession_id;
    $item_clone = $item;
    $data = $collection1[$typesession_id]->map(function($it, $k) use ($item_clone) {
        if ($typesession_id == $it->typesession_id) {
            return $item_clone->merge($it);
        }

        return $it;
    });

    return $data->merge($item);
});

dd($result);

【讨论】:

  • 所以你给出了未经证实的答案?
  • 是的,它基于我当前的 laravel 任务。您可以在 SO 中看到许多未经测试的答案,并且它们有效。
猜你喜欢
  • 2018-03-23
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多