首页 > 解决方案 > Laravel 查询生成器 Eloquent

问题描述

如何在 Laravel 中进行此查询?

SELECT GS_CONTRATOS.*,GS_ACESSOS.* from GS_CONTRATOS
full outer join GS_ACESSOS on GS_ACESSOS.CONTRATO_ID=GS_CONTRATOS.ID
where EMPRESA_ID='1' and (WEBUSER='ec' or WEBUSER is null) 

我得到了一个这样的结果并给了我 0 个结果,我尝试将 2 个 where 与 varius 变量一起使用,但由于我无法同时获得两个 where,所以无法正常工作。我不能解释比这个 bcs 我什至不知道如何进行这个查询

她应该在 GS_ACESSO 和所有 GS_CONTRATOS 中给我所有结果,即使其中一个不存在。

$contratos = Contrato::query()
->join('GS_ACESSOS','GS_ACESSOS.CONTRATO_ID','=','GS_CONTRATOS.ID','full outer')
->where('GS_ACESSOS.WEBUSER','=',$id)->orWhere('EMPRESA_ID','=',$emp)
->get(['GS_CONTRATOS.*','GS_ACESSOS.*']);

标签: phpsql-serverlaravel

解决方案


当你想添加括号时,你必须使用带闭包的 where 条件。你去:

$contratos = Contrato::query()
    ->join('GS_ACESSOS','GS_ACESSOS.CONTRATO_ID','=','GS_CONTRATOS.ID','full outer')
    ->where('GS_ACESSOS.WEBUSER', $id)
    ->where(function ($q) use ($emp) {
        $q->where('WEBUSER', 'ec')
            ->orWhere('EMPRESA_ID', $emp);
    })
    ->get(['GS_CONTRATOS.*','GS_ACESSOS.*']);

参考:https ://laravel.com/docs/8.x/queries#logical-grouping


推荐阅读