【问题标题】:array_merge on 2 different entities collection, sort them by common propertyarray_merge 在 2 个不同的实体集合上,按公共属性对它们进行排序
【发布时间】:2014-10-27 10:32:19
【问题描述】:

我有 2 个实体,发票和预付款。每个都有一个“paidAt”属性。

在控制器中,我在一个日期范围内同时获取 Invoice 和 Advance。然后,我将它们合并为 1 个单个数组并将其推送到我的视图中,并在其中将它们显示在一个列表中。

在将它们推送到我的视图之前,我想使用“paidAt”属性对它们进行排序。我在 PHP doc 上找到了一些多维排序函数,但都使用了 php 原生函数 array_multisort()

所以 Symfony 给我一个错误:Cannot use object of type Entity\Invoice as array

有什么可以做的吗?

【问题讨论】:

  • 请先添加一些代码。
  • 我认为我选择了一种糟糕的方式来做到这一点。您为什么不根据需要检索所有数据而不合并并且直接从数据库中排序?
  • 在我的发票存储库中,我可以同时获取 Invoice 和 Advance 实体吗?这不是逻辑误会吗?

标签: php sorting symfony merge entity


【解决方案1】:

如果你在两个实体中都有 getter getPaidAt(),你可以使用升序

usort(
    $collection,
    function($a, $b) {
        if ($a->getPaidAt() === $b->getPaidAt()) {
            return 0;
        }

        return ($a->getPaidAt() < $b->getPaidAt())? -1 : 1;
    }
);

如果要降序排序,只需将&lt; 替换为&gt;。

【讨论】:

    【解决方案2】:

    你可以用usort自己写比较函数,它必须适合发票和预付款(你有超类吗?)

    http://php.net/manual/de/function.usort.php

    附加信息:using usort with associative array inside symfony2 controller

    【讨论】:

      猜你喜欢
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      相关资源
      最近更新 更多