提前感谢您的帮助。 在一个我无法找到解决方案的问题上,我来帮忙。 基本上,我需要通过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不是很好。有人经历过这样的事情。
基本上,我需要一部分固定查询,所以我不必每次进行比较,因为它是标准编码。解决这种情况的另一种方法也有帮助。
谢谢大家的合作。