在集合laravel上使用函数的Sort By

jfewjypa  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(143)

我需要一些帮助,我有一张这样的table

CREATE TABLE IF NOT EXISTS `items` (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
   `code` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
    `unitPrice` decimal(8,2) NOT NULL,
  `quantity` int(11) NOT NULL,
  `totalSold` int(11) DEFAULT NULL,
   `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

并且在使用DB::table('items')->get();之后,我希望得到与运行此sql命令相同的结果

"select `code`,(`unitPrice`*(`quantity`+`totalSold`)) as totalEarnIfsold from `items` order by `totalEarnIfsold` desc"

我在海外财务委员会没有成功的情况下所能达到的是:

$items_all->sortBy([
          $totalEarnIfsold=  fn ($a) => $a->unitPrice *($a->quantity+$a->totalSold),
          ['totalEarnIfsold', 'desc'],           
        ]);

所以我需要你的帮助,如果你可以的话,谢谢

fiei3ece

fiei3ece1#

您可以按以下方式进行

首先,您需要使用Map函数计算totalEarnIfsold,然后,您可以轻松地使用值进行排序

$items_all = $items_all->map(function($item) {
        $item->totalEarnIfsold = $item->unitPrice *($item->quantity + $item->totalSold);
        return $item;
        })->sortByDesc('totalEarnIfsold');

相关问题