Laravel选择带有Scope的SubQuery

时间:2017-10-26 12:12:58

标签: php sql-server laravel laravel-5 laravel-eloquent

提前感谢您的帮助。 在一个我无法找到解决方案的问题上,我来帮忙。 基本上,我需要通过laravel \ Eloquent创建一个子查询,并能够在子查询中应用范围。 到目前为止,我已经尝试了两种范围模型,全局和本地,但没有成功。 我有以下情况:

我有一个具有以下范围的模型:

    public function scopeParametro($query) {
    $param = $this->param();
    if (Auth::user()->perfil != null) {
        $perfil = Auth::user()->perfil;
        if ($param == 0) {
            return $query->where('empresa_id', $perfil->empresa_id);
        } else if ($param == 1) {
            return $query->where('empresa_id', 47)
                            ->where('filial_id', 31);
        } else if ($param == 2) {
            return $query->whereNull($this->getTable() . '.empresa_id')
                            ->whereNull($this->getTable() . '.filial_id');
        }
    }
}

当我直接从查询中调用此作用域时,它可以正常工作,但如果我在子查询中应用相同的作用域,在我看来它不会设置值:

注意:Auth变量在两种情况下都具有所有属性。

例如:

  Saldo::select(DB::raw('sum(quantidade)'))
                    ->join('enderecos', 'saldos.endereco_codigo', 'enderecos.codigo')
            ->parametro()

这很好用。 这不是:

   $subQuerySaldoSetor = new \Sofa\Eloquence\Subquery(
            Saldo::select(DB::raw('sum(quantidade)'))
                    ->join('enderecos', 'saldos.endereco_codigo', 'enderecos.codigo')
            ->parametro()
    );

    return Setor::whereNotNull('id')->select(['id', $subQuerySaldoSetor])->first();

看起来像是相同的结构,但是,它在子查询中放置它生成此输出:

SQLSTATE[07002]: [Microsoft][ODBC Driver 11 for SQL Server]COUNT field incorrect or syntax error (SQL: select top 1 [id], (select sum(quantidade) from [saldos] inner join [enderecos] on [saldos].[endereco_codigo] = [enderecos].[codigo] where [empresa_id] = ? and [filial_id] = ?) from [setores] where [id] is not null)

所有查询都是正确的,但未正确设置变量的值 注意:我已经尝试设置falor fixamnete,以测试该功能,即使这样,也没有成功。

众所周知,对于复杂的查询,laravel subquerys不是很好。有人经历过这样的事情。

基本上,我需要一部分固定查询,所以我不必每次进行比较,因为它是标准编码。解决这种情况的另一种方法也有帮助。

谢谢大家的合作。

0 个答案:

没有答案