2017-12-18 272 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