2016-04-19 7 views
1

Ich habe 3 Sammlungen in meiner gemischt werden controller, mein Problem ist, ich möchte die zusammengeführte Sammlung von expiry_date sortiert werden.Laravel Sortierung verschmolzen Sammlungen

$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); 
+0

Nur ein Hinweis: Ich würde einen Zug machen, die einen 'scopeExpiresAfter enthält ($ query, DateTimeInterface $ date)' Methode, dass Sie Ihren 'Server' anwenden können,' Domain' und 'Host' Modelle. Das wird dich dann ein bisschen aufräumen: 'Server :: expiresAfter ($ threeMonths) -> get()'. –

Antwort

0

Gelöst SQL-Abfragen verwendet, kann jeder in Fall für etwas ähnliches suchen.

$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();   
1

Wenn orderBy() Arbeiten ordnungsgemäß in Ihren Anfragen, soll dies für Sie arbeiten:

$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'); 
+0

'orderBy()' funktioniert gut, aber das funktioniert nicht – dev7

+0

Erhalten Sie einen Fehler? Wenn nicht, was genau funktioniert nicht? –

+0

'asort() erwartet, dass Parameter 2 lang ist, String gegeben' Ich habe es ohne Asc versucht und keinen Fehler, aber es wurde nicht sortiert – dev7

Verwandte Themen