Laravel 8 和 Livewire - 查询不起作用
Posted
技术标签:
【中文标题】Laravel 8 和 Livewire - 查询不起作用【英文标题】:Laravel 8 & Livewire - query not works 【发布时间】:2021-04-14 10:12:19 【问题描述】:我正在使用 Laravel 8 和 Livewire 制作应用程序。
在我的reportResidui.blade.php
视图中,我集成了一个名为report-residui-header-filter
的livewire 组件,我用它来过滤(这个组件工作正常)。
当我执行查询时出现问题,我需要从一个表中过滤,以便使用 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');
【问题讨论】:
【参考方案1】:您正在尝试按anagrafica_soggetto.codiceFiscale
进行分组,但您的查询中有许多联接,因此您必须明确告诉 mysql 如何对选择列表中的其他选定项进行分组。
解决方案是按您要加入的每个表中的至少 1 个字段进行分组。
【讨论】:
以上是关于Laravel 8 和 Livewire - 查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章
dompdf 没有从 Laravel 8 和 Livewire 视图下载 PDF
在 Laravel 8 Jetstream 的 Blade 组件中绑定 Livewire 属性
未找到 InvalidArgumentException 视图 [layouts.app]。 Laravel-8 LiveWire-2
Laravel 8 livewire 在任务完成或在其外部单击页面时隐藏菜单组件
使用 Jetstream 在 Laravel 8 中添加新 Livewire 组件时如何解决 RootTagMissingFromViewException 错误