Laravel 8 & Livewire - 查询无效
Laravel 8 & Livewire - query not works
我正在使用 Laravel 8 和 Livewire 进行申请。
在我的 reportResidui.blade.php
视图中,我集成了一个名为 report-residui-header-filter
的 livewire 组件,我用它来过滤(这个组件工作正常)。
当我执行查询时出现问题,我需要从 table 中过滤,以便使用 where 子句 where('importoResiduo', '>', '0')
对字段 anagrafica_soggetto.codiceFiscale
的数据进行分组。
但是当我 运行 查询时,我得到以下错误,我不明白它来自什么,因为删除 groupBy 子句有效。
有人有什么建议或建议吗?
错误:
SQLSTATE[42000]: Syntax error or access violation:
1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'tenantseed_prova_province.anagrafica_soggetto.denominazioneSoggetto'
which is not functionally dependent on columns in GROUP BY clause;
this is incompatible with sql_mode=only_full_group_by (SQL: select distinct `denominazioneSoggetto`, `anagrafica_soggetto`.`codiceFiscale`, `indirizzoPOSTA`, `importoCarico` as `carico`,
`importoResiduo` as `residuo`, `pagatoNormale` as `riscosso`, `pagatoDiscarico` as `sgravio` from `anagrafica_soggetto` inner join `minuta_partita` on `minuta_partita`.`id_soggetto` = `anagrafica_soggetto`.`id` left outer join `users` on `minuta_partita`.`id_user` = `users`.`id` left outer join `partita_pagamenti` on `partita_pagamenti`.`id_minuta_partita` =
`minuta_partita`.`id` inner join `tipologia_imposta` on `minuta_partita`.`id_tipologia_imposta`
= `tipologia_imposta`.`id` where `importoResiduo` > 0 group by
`anagrafica_soggetto`.`codiceFiscale`)
带查询的 Livewire 组件:
<?php
namespace App\Http\Livewire;
use Livewire\Component;
use Illuminate\Http\Request;
use App\Models\MinutaPartita;
use App\Models\AnagraficaSoggetto;
use App\Models\TipologiaImposta;
use Illuminate\Support\Facades\DB;
use Livewire\WithPagination;
use App\Tenant;
class ReportResiduiHeaderFilter extends Component
{
protected $paginationTheme = 'bootstrap';
protected $connection = null;
public $first_render = true;
public $filtered = null;
// Definiamo l'array dei filtri, e filtriamo se vogliamo raggruppare i filtri per CF del soggetto
public $filter = [
'group' => '' //indichiamo se raggruppare o meno (vuoto non si raggruppa, 1 si raggruppa per CF)
];
public function mount(Request $request){
if (null !== $request->get('throughMiddleware')) {
$this->connection = 'tenant';
} else {
$this->connection = null;
}
}
public function filtri(){
if (null !== request()->get('throughMiddleware')) {
$this->connection = 'tenant';
} else {
$this->connection = null;
}
$anagrafica = new AnagraficaSoggetto();
$anagrafica->setConnection($this->connection);
$pratiche = $anagrafica->select(
'denominazioneSoggetto',
'anagrafica_soggetto.codiceFiscale',
'indirizzoPOSTA',
'importoCarico as carico',
'importoResiduo as residuo',
'pagatoNormale as riscosso',
'pagatoDiscarico as sgravio',
)->distinct()
->join('minuta_partita', 'minuta_partita.id_soggetto', '=', 'anagrafica_soggetto.id')
->join('users', 'minuta_partita.id_user', '=', 'users.id', 'left outer')
->join('partita_pagamenti', 'partita_pagamenti.id_minuta_partita', '=', 'minuta_partita.id', 'left outer')
->join('tipologia_imposta', 'minuta_partita.id_tipologia_imposta', '=', 'tipologia_imposta.id');
// recupero solo le pratiche che hanno residui non nulli
$pratiche = $pratiche->where('importoResiduo', '>', 0);
// if i remove this and i get the value by where clause it woks
if ($this->filter['group'] != '') {
$pratiche = $pratiche->groupBy('anagrafica_soggetto.codiceFiscale')->get();
}
dd($pratiche);
}
public function render()
{
return view('livewire.report-residui-header-filter');
}
}
您正在尝试按 anagrafica_soggetto.codiceFiscale
进行分组,但是您的查询中有很多联接,因此您必须明确告诉 MySQL 如何对 select 中的其他 selected 项目进行分组=16=]列表。
解决方案是根据您要加入的每个 table 中的至少 1 个字段进行分组。
我正在使用 Laravel 8 和 Livewire 进行申请。
在我的 reportResidui.blade.php
视图中,我集成了一个名为 report-residui-header-filter
的 livewire 组件,我用它来过滤(这个组件工作正常)。
当我执行查询时出现问题,我需要从 table 中过滤,以便使用 where 子句 where('importoResiduo', '>', '0')
对字段 anagrafica_soggetto.codiceFiscale
的数据进行分组。
但是当我 运行 查询时,我得到以下错误,我不明白它来自什么,因为删除 groupBy 子句有效。
有人有什么建议或建议吗?
错误:
SQLSTATE[42000]: Syntax error or access violation:
1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'tenantseed_prova_province.anagrafica_soggetto.denominazioneSoggetto'
which is not functionally dependent on columns in GROUP BY clause;
this is incompatible with sql_mode=only_full_group_by (SQL: select distinct `denominazioneSoggetto`, `anagrafica_soggetto`.`codiceFiscale`, `indirizzoPOSTA`, `importoCarico` as `carico`,
`importoResiduo` as `residuo`, `pagatoNormale` as `riscosso`, `pagatoDiscarico` as `sgravio` from `anagrafica_soggetto` inner join `minuta_partita` on `minuta_partita`.`id_soggetto` = `anagrafica_soggetto`.`id` left outer join `users` on `minuta_partita`.`id_user` = `users`.`id` left outer join `partita_pagamenti` on `partita_pagamenti`.`id_minuta_partita` =
`minuta_partita`.`id` inner join `tipologia_imposta` on `minuta_partita`.`id_tipologia_imposta`
= `tipologia_imposta`.`id` where `importoResiduo` > 0 group by
`anagrafica_soggetto`.`codiceFiscale`)
带查询的 Livewire 组件:
<?php
namespace App\Http\Livewire;
use Livewire\Component;
use Illuminate\Http\Request;
use App\Models\MinutaPartita;
use App\Models\AnagraficaSoggetto;
use App\Models\TipologiaImposta;
use Illuminate\Support\Facades\DB;
use Livewire\WithPagination;
use App\Tenant;
class ReportResiduiHeaderFilter extends Component
{
protected $paginationTheme = 'bootstrap';
protected $connection = null;
public $first_render = true;
public $filtered = null;
// Definiamo l'array dei filtri, e filtriamo se vogliamo raggruppare i filtri per CF del soggetto
public $filter = [
'group' => '' //indichiamo se raggruppare o meno (vuoto non si raggruppa, 1 si raggruppa per CF)
];
public function mount(Request $request){
if (null !== $request->get('throughMiddleware')) {
$this->connection = 'tenant';
} else {
$this->connection = null;
}
}
public function filtri(){
if (null !== request()->get('throughMiddleware')) {
$this->connection = 'tenant';
} else {
$this->connection = null;
}
$anagrafica = new AnagraficaSoggetto();
$anagrafica->setConnection($this->connection);
$pratiche = $anagrafica->select(
'denominazioneSoggetto',
'anagrafica_soggetto.codiceFiscale',
'indirizzoPOSTA',
'importoCarico as carico',
'importoResiduo as residuo',
'pagatoNormale as riscosso',
'pagatoDiscarico as sgravio',
)->distinct()
->join('minuta_partita', 'minuta_partita.id_soggetto', '=', 'anagrafica_soggetto.id')
->join('users', 'minuta_partita.id_user', '=', 'users.id', 'left outer')
->join('partita_pagamenti', 'partita_pagamenti.id_minuta_partita', '=', 'minuta_partita.id', 'left outer')
->join('tipologia_imposta', 'minuta_partita.id_tipologia_imposta', '=', 'tipologia_imposta.id');
// recupero solo le pratiche che hanno residui non nulli
$pratiche = $pratiche->where('importoResiduo', '>', 0);
// if i remove this and i get the value by where clause it woks
if ($this->filter['group'] != '') {
$pratiche = $pratiche->groupBy('anagrafica_soggetto.codiceFiscale')->get();
}
dd($pratiche);
}
public function render()
{
return view('livewire.report-residui-header-filter');
}
}
您正在尝试按 anagrafica_soggetto.codiceFiscale
进行分组,但是您的查询中有很多联接,因此您必须明确告诉 MySQL 如何对 select 中的其他 selected 项目进行分组=16=]列表。
解决方案是根据您要加入的每个 table 中的至少 1 个字段进行分组。