2017-12-18 271 views
1

可以說我有兩個表:用戶和組織排序有關表值(包括但現有關係的元素)

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

organisations: 
id int, 
name varchar 
deleted bool 

,我想用的類型1名用戶組織排序。我知道,當我想通過關係值排序我必須使用加入:

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

,但只顯示有1型的用戶組織(與刪除設置爲0),我的問題是:我可以修改這個查詢也返回沒有適當的用戶連接它的值?

+0

什麼是您希望您的所有預期的輸出使用條件以便與更多的加盟條款加盟用戶的類型是否爲1,而是先將類型1的用戶和其他用戶分類? –

+0

我想總是按用戶(類型1,刪除0)名稱排序的所有組織,但是當組織沒有適當的用戶連接到它時,它應該將用戶名模擬爲空字符串。 – Gieerzetka

回答

1

你需要一個左爲了得到所有組織,要訂購的結果您可以通過子句

$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

感謝人!我已經改變了你的代碼(fe。first join是不必要的),但它起作用了! – Gieerzetka