Laravel对合并的集合进行排序

时间:2016-04-19 10:48:26

标签: php laravel

我在controller合并了3个集合,我的问题是我希望合并的集合按expiry_date排序。

    $expiry = date('Y-m-d', strtotime('+3 months'));
    $servers = Server::where('expiry_date', '<', $expiry)->orderBy('expiry_date', 'asc')->get();
    $domains = Domain::where('expiry_date', '<', $expiry)->orderBy('expiry_date', 'asc')->get();
    $hosts = Host::where('expiry_date', '<', $expiry)->orderBy('expiry_date', 'asc')->get();
    $invoices = $domains->merge($servers)->merge($hosts);

2 个答案:

答案 0 :(得分:1)

如果orderBy()在您的查询中正常运行,这应该适合您:

$expiry = date('Y-m-d', strtotime('+3 months'));
$servers = Server::where('expiry_date', '<', $expiry)->get();
$domains = Domain::where('expiry_date', '<', $expiry)->get();
$hosts = Host::where('expiry_date', '<', $expiry)->get();
$invoices = $domains->merge($servers)->merge($hosts);
$invoices->sortBy('expiry_date');

答案 1 :(得分:0)

使用SQL查询解决,以防任何人寻找类似的东西。

$servers = DB::table('servers')->select(DB::raw('"Server" as type, servers.id, servers.client_id, servers.expiry_date, servers.name, clients.name as clientName'))->leftJoin('clients', 'servers.client_id', '=', 'clients.id')->where('expiry_date', '<', $expiry);
    $domains = DB::table('domains')->select(DB::raw('"Domain" as type, domains.id, domains.client_id, domains.expiry_date, domains.name, clients.name as clientName'))->leftJoin('clients', 'domains.client_id', '=', 'clients.id')->where('expiry_date', '<', $expiry);
    $hosts = DB::table('hosts')->select(DB::raw('"Host" as type, hosts.id, hosts.client_id, hosts.expiry_date, hosts.name, clients.name as clientName'))->leftJoin('clients', 'hosts.client_id', '=', 'clients.id')->where('expiry_date', '<', $expiry)->unionAll($domains)->unionAll($servers)->orderBy('expiry_date', 'asc')->get();