首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 8和Livewire -查询不起作用

问Laravel 8和Livewire -查询不起作用
EN

Stack Overflow用户
提问于 2021-04-14 18:12:19
回答 1查看 165关注 0票数 0

我正在用Laravel 8和Livewire做申请。在我的reportResidui.blade.php视图中,我集成了一个名为report-residui-header-filter的livewire组件,我用它来过滤(这个组件工作得很好)。问题发生在我执行查询时,我需要从一个表中进行筛选,以便使用where子句where('importoResiduo', '>', '0')对字段anagrafica_soggetto.codiceFiscale的数据进行分组。但是当我运行查询时,我得到了以下错误,并且我不知道它是从哪里来的,因为删除groupBy子句是有效的。

有人有什么建议或建议吗?

错误:

代码语言:javascript
复制
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组件:

代码语言:javascript
复制
<?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');
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-20 17:56:52

您正在尝试按anagrafica_soggetto.codiceFiscale进行分组,但是查询中有许多联接,因此必须显式地告诉MySQL如何对选择列表中的其他选定项进行分组。

解决方案是对每个要连接的表中的至少一个字段进行分组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67089743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档