雄辩的顺序除了一行

时间:2017-06-03 22:15:46

标签: php mysql laravel eloquent

我基本上只想按名称订购我的结果,除了1行 - 我想保留在结果的底部。

我有以下数据库表:

INSERT INTO `teams` (`id`, `name`, `created_at`, `updated_at`) VALUES
(1, 'Anaheim Ducks', NULL, NULL),
(2, 'Arizona Coyotes', NULL, NULL),
(3, 'Atlanta Flames', NULL, NULL),
(4, 'Atlanta Thrashers', NULL, NULL),
(5, 'Boston Bruins', NULL, NULL),
(6, 'Buffalo Sabres', NULL, NULL),
(7, 'Calgary Flames', NULL, NULL),
(8, 'California Golden Seals', NULL, NULL),
(9, 'Carolina Hurricanes', NULL, NULL),
(10, 'Chicago Blackhawks', NULL, NULL),
(11, 'Cleveland Barons', NULL, NULL),
(12, 'Colorado Avalanche', NULL, NULL),
(13, 'Colorado Rockies', NULL, NULL),
(14, 'Columbus Blue Jackets', NULL, NULL),
(49, 'Other', NULL, NULL);

现在,我想使用Eloquent按nam e来订购所有这些,除了我希望Other位于底部。

我不确定如何使用orderBy()执行此操作。我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以编写自己的比较器进行排序并实现您想要的任何逻辑。

例如:

7.0.0

答案 1 :(得分:1)

作为@Anton's的答案的替代方案(并且您使用的是Laravel 5.3+),您可以使用partition()方法:

$teams = Team::orderBy('name')->get()
    ->partition(function ($item) {
        return $item->name != 'Other';
    })->flatten();

这将推动"其他"排在列表底部,同时按顺序保留集合的其余部分。

希望这有帮助!

相关问题