2017-12-18 3 views
1

Lets sagen, ich habe zwei Tabellen: Benutzer und OrganisationenSortierung auf verwandte Tabellenwert (einschließlich der Elemente, ohne bestehende Beziehung)

users: 
id int, 
name varchar, 
type int, 
deleted bool 

organisations: 
id int, 
name varchar 
deleted bool 

und ich möchte Organisationen von Namens Typ 1 Benutzer sortieren. Ich weiß, dass, wenn ich durch die Beziehung Wert sortieren möchte ich beitreten verwenden:

$organisationsModel -> join('users', 'organisations.id', '=', 'users.organisationId', 'left') 
    -> select('organisations.*', 'users.name as userName') 
    -> where('users.type', 1) 
    -> where('users.deleted', 0) 
    -> orderBy('userName', 'ASC); 

aber es zeigt nur Organisationen, die Benutzer vom Typ 1 (mit entfällt auf 0 gesetzt) ​​haben, und meine Frage ist: Kann ich Ändern Sie diese Abfrage, um auch Werte zurückzugeben, ohne dass ein richtiger Benutzer damit verbunden ist?

+0

verwenden Was ist Ihre erwartete Ausgabe Sie alle wollen die Benutzer, ob der Typ 1 ist oder nicht, aber Benutzer zuerst mit Typ 1 und dann mit anderen sortieren? –

+0

Ich möchte immer alle Organisationen nach Benutzer sortiert erhalten (Typ 1, gelöscht 0) Name, aber wenn Organisation keinen richtigen Benutzer zugeordnet hat, sollte es Benutzername als leere Zeichenfolge emulieren. – Gieerzetka

Antwort

1

Sie links müssen beitreten mit zusätzlichen Verbindungsklauseln, um alle Organisationen zu bekommen, um die Ergebnisse zu bestellen Sie bedingte order by-Klausel

$organisationsModel->leftJoin('users', function ($join) { 
            $join->on('organisations.id', '=', 'users.organisationId') 
             ->where('users.type', 1) 
             ->where('users.deleted', 0); 
        }) 
        ->select('organisations.*', 'users.name as userName') 
        ->orderByRaw('CASE WHEN users.type = 1 AND users.deleted = 0 THEN 1 ELSE 0 END DESC') 
        ->orderBy('userName', 'ASC); 

Another similar problem

+1

DANKE MANN! Ich habe Ihren Code ein wenig geändert (z. B. erster Join ist unnötig), aber es funktioniert! – Gieerzetka

Verwandte Themen