Expose SQL / Dumb Question

I’m trying to expose the SQL statements that GroceryCrud execute to debug a problem.
Maybe It’s a dumb question, but I can’t exply why a filter where is not working as expected. In associado(), the statement $crud->where (‘ativo’, 1); is working, filtering the active associates. But in the second class - associadosArquivados(), the statement $crudInativo->where (‘ativo’, 0); is returning the same output as the first. I already remove all the customizations and filterings and the problem occour always

class Associado extends BaseController
{
    public function associados()
    {
        $titulo = 'Associados';
        $crud = $this->_getGroceryCrudEnterprise();

        $crud->setCsrfTokenName(csrf_token());
        $crud->setCsrfTokenValue(csrf_hash());

        $crud->setTable('cad_associados');
        $crud->setSubject('Associado', 'Associados');

        $associadosArquivados = site_url('admin/associadosarquivados');
        $crud->setDatagridButton('Arquivados', 'plus', $associadosArquivados, false, 'top-left');

        $crud->setPrimaryKey('id', 'cad_associados');
        $crud->setRelation('cargo', 'assoc_x_cargos', 'cargo');
        $crud->setRelation('sexo', 'assoc_x_sexo', 'sexo');
        $crud->setRelation('situacao', 'assoc_x_status', 'status');
        $crud->setRelation('operadora', 'assoc_x_operadoras', 'nome');
        $crud->setRelation('estado_civil', 'assoc_x_estadoCivil', 'estadoCivil');
        $crud->where('ativo', 1);

        // Altera o nome de exibição das colunas (tanto na grade quanto nos formulários)
        $crud->displayAs([
            'data_nascimento' => 'Data de Nascimento',
            'naturalidade'    => 'Naturalidade',
            'rg'              => 'RG',
            'cpf'             => 'CPF',
            'endereco'        => 'Endereço',
            'numero'          => 'Número',
            'bairro'          => 'Bairro',
            'cidade'          => 'Cidade',
            'cep'             => 'CEP',
            'complemento'     => 'Complemento',
            'banco'           => 'Banco',
            'agencia'         => 'Agência',
            'conta'           => 'Conta',
            'tratamento'      => 'Tratamento',
            'nome'            => 'Nome',
            'sexo'            => 'Sexo',
            'situacao'        => 'Situação',
            'estado_civil'    => 'Estado Civil',
            'conjuge'         => 'Nome do Cônjuge',
            'filiacao_pai'    => 'Nome do Pai',
            'filiacao_mae'    => 'Nome da Mãe',
            'email1'          => 'E-mail Principal',
            'email2'          => 'E-mail Secundário',
            'fone1'           => 'Telefone Principal',
            'fone2'           => 'Telefone Secundário',
            'celular'         => 'Celular',
            'operadora'       => 'Operadora',
            'estado_atuacao'  => 'Estado Atuação',
            'cidade_atuacao'  => 'Cidade Atuação',
            'possemagistratura' => 'Posse Magistratura',
            'ambanamatra' => 'AMB / ANAMATRA',
            'uf'              => 'UF',
            'obs' =>'Observação',
            'opccontato' => 'Opção Contato'
        ]);

        $crud->unsetSearchColumns(['ativo','obs']);

        // Formata a exibição da coluna 'ativo'
        $crud->callbackColumn('ativo', function ($value, $row) {
            return $value == 1 ? '<span class="badge bg-success">ATIVO</span>' : '<span class="badge bg-danger">inativo</span>';
        });

        //Colunas para esconder no datagrid
        $crud->unsetColumns([
            'banco',
            'agencia',
            'conta',
            'filiacao_pai',
            'filiacao_mae',
        ]);

        // Remove o botão "Excluir" da lista principal
        $crud->unsetDelete();

        // Remove os checkboxes de seleção de linha (ações em massa)
        //$crud->unsetBulkActions();

        //Agrupamento de colunas
        $crud->groupFields("Identificação", ['tratamento' , 'nome', 'sexo', 'situacao', 'data_nascimento', 'naturalidade', 'rg', 'cpf']);
        $crud->groupFields("Filiação / Cônjuge", ['estado_civil', 'conjuge', 'filiacao_pai', 'filiacao_mae']);
        $crud->groupFields("Endereço", ['endereco', 'numero', 'bairro', 'cidade','uf', 'complemento','cep']);
        $crud->groupFields("Dados Associativos", ['cidade_atuacao', 'estado_atuacao', 'banco', 'agencia','conta', 'ativo']);
        $crud->groupFields("Contato", ['email1','email2', 'fone1', 'fone2', 'celular', 'operadora']);
        $crud->groupFields("Observação", ['obs']);

        $output = $crud->render();

        return $this->_associado_output($titulo, $output);
    }
    public function associadosArquivados()
    {
        $associados = site_url('admin/associados');
        $titulo = 'Associados Arquivados';
        $crudInativo = $this->_getGroceryCrudEnterprise();

        $crudInativo->setCsrfTokenName(csrf_token());
        $crudInativo->setCsrfTokenValue(csrf_hash());

        $crudInativo->setTable('cad_associados');
        $crudInativo->setSubject('Associado', 'Associados');

        $crudInativo->setDatagridButton('Associados', 'plus', $associados, false, 'top-left');

        // $crudInativo->setPrimaryKey('id', 'cad_associados');
        // $crudInativo->setRelation('cargo', 'assoc_x_cargos', 'cargo');
        // $crudInativo->setRelation('sexo', 'assoc_x_sexo', 'sexo');
        // $crudInativo->setRelation('situacao', 'assoc_x_status', 'status');
        // $crudInativo->setRelation('operadora', 'assoc_x_operadoras', 'nome');
        // $crudInativo->setRelation('estado_civil', 'assoc_x_estadoCivil', 'estadoCivil');
        $crudInativo->where('ativo', 0);
        
        $crudInativo->unsetSearchColumns(['obs']);

        // Formata a exibição da coluna 'ativo'
        // $crudInativo->callbackColumn('ativo', function ($value, $row) {
        //     return $value == 1 ? '<span class="badge bg-success">ATIVO</span>' : '<span class="badge bg-danger">inativo</span>';
        // });

        //Colunas para esconder no datagrid
        $crudInativo->unsetColumns([
            'banco',
            'agencia',
            'conta',
            'filiacao_pai',
            'filiacao_mae',
            'naturalidade',
            'endereco',
            'numero',
            'bairro',
            'cidade',
            'cep',
            'complemento',
            'tratamento',
            'situacao',
            'estado_civil',
            'conjuge',
            'email1',
            'email2',
            'fone1',
            'fone2',
            'celular',
            'operadora',
            'possemagistratura',
            'uf',
            'opcaocontato',
        ]);

        // Remove o botão "Excluir" da lista principal
        $crudInativo->unsetDelete();

        // Remove os checkboxes de seleção de linha (ações em massa)
        //$crudInativo->unsetBulkActions();


        $output = $crudInativo->render();

        return $this->_associado_output($titulo, $output);
    }
    private function _associado_output($titulo, $output = null) {
        if (isset($output->isJSONResponse) && $output->isJSONResponse) {
            header('Content-Type: application/json; charset=utf-8');
            echo $output->output;
            exit;
        }
        
        // Cria o array com todas as variáveis para a view
        $data['title'] = $titulo;
        $data['output'] = $output->output;
        $data['css_files'] = $output->css_files;
        $data['js_files'] = $output->js_files;

        return view('partials/admin/associados', $data);
    }

    private function _getDbData() {
        $db = (new ConfigDatabase())->default;
        return [
            'adapter' => [
                'driver' => 'Pdo_Mysql',
                'host'     => $db['hostname'],
                'database' => $db['database'],
                'username' => $db['username'],
                'password' => $db['password'],
                'charset' => 'utf8'
            ]
        ];
    }
    private function _getGroceryCrudEnterprise($bootstrap = true, $jquery = true) {
        $db = $this->_getDbData();
        $config = (new ConfigGroceryCrud())->getDefaultConfig();

        $groceryCrud = new GroceryCrud($config, $db);
        return $groceryCrud;
    }
}

I guess you wanted to actually write where(['ativo' => 1]) (and where(['ativo' => 0]) or maybe where('ativo') and where('NOT ativo'))?

The way you wrote it, you pass two arguments to a method taking only one. So the second argument gets dropped, effectively calling where('ativo') in both cases, which will end up as WHERE ativo in the SQL.

WHERE ativo gives you all rows where the value of ativo is interpreted by the DBMS as true (i.e., assuming there only are 0 and 1, the rows with 1 but not the ones with 0). That’s why where('ativo', 1) looks like it’s producing WHERE ativo = 1 even though it isn’t.

Thanks!!
I’m used to use the CI4 model sintaxe. I’ll try.

Worked as expected!!! Thanks!!!
:wink: :blush:

Anyway, there is some way to expose the sql that the app runs? For debug? I´m the old school guy.

Hello @eduardogcorrea , there is a way yes but it is kind of experimental at the moment so it is hardcoded to a specific file. More specifically, you will need to use a custom model.

What I really do is to use the actual model of Grocery CRUD and just adding it back to Grocery CRUD with a profiler.

More specifically, if you do this at your initialisation of Grocery CRUD:

$model = new \GroceryCrud\Core\Model($database);

// This line does the trick
$model->setDefaultProfiler();

$crud = new GroceryCrud($config, $database);

$crud->setModel($model);

then you will have the logs at the folder Logs/db-logs.log there is a chance that you will get an error if the folder Logs doesn’t exist. If this is the case then create a Logs folder at your root of your project and don’t forget to give write access. Let me know if that worked.

Regards
Johnny