DB Combo
É o campo em que a pessoa escolhe um item de uma lista — e a lista vem de uma tabela do seu projeto. Você não escreve código: aponta a tabela e a coluna no painel, e o MadBuilder monta a consulta, filtra, ordena e ainda liga um combo no outro.
Quando usar
O DB Combo entrega a lista inteira junto com a tela e faz a busca no navegador: abre instantâneo em listas médias, e fica pesado nas grandes. Use esta régua:
| Sua situação | Componente certo |
|---|---|
| Lista da tabela com menos de 30 itens | DB Select |
| Lista da tabela com 30 a 200 itens | DB Combo |
| Lista com mais de 200 itens | DB Unique Search |
| Opções fixas, que não vêm de tabela (Ativo / Inativo) | Select |
| Escolher vendo várias colunas e filtros, numa grade | DB Seek |
Colocar o campo na tela
- Abra o formulário no Studio.
- Clique com o botão direito no ponto exato onde o campo deve aparecer — dentro da linha, ao lado do campo vizinho.
- No menu que abre, escolha DB Combo.
- Clique no campo recém-criado para o painel da direita mostrar as opções dele.
Dizer de onde vêm as opções
Esta é a única parte obrigatória. Sem ela o campo aparece vazio.
- No painel, abra a seção Fonte de dados.
- Database: o banco. Deixe como está, a não ser que a tabela esteja em outro.
- Tabela (Model): a tabela de onde saem as opções — no exemplo dos prints, estado.
- Chave: a coluna que será gravada. Quase sempre id.
- Display: a coluna que a pessoa lê na tela — aqui {nome}.
- Ordenar por: por qual coluna a lista aparece, e se é crescente (ASC) ou decrescente (DESC).
O painel, campo a campo
Escolha um item da lista abaixo: ele acende no print.

Passe o mouse na lista — ou use ↑ ↓ depois de focar um item.
{nome} - {cpf}. Serve para diferenciar homônimos na hora de escolher.Mostrar só parte dos registros
Por padrão o combo lista tudo que existe na tabela. As Regras de carregamento cortam essa lista — só os ativos, só os do tipo escolhido, só os do ano corrente.
- No painel, clique na aba Regras de carregamento (fica acima de Propriedades).
- Clique em Configurar filtros. Abre a janela de regras.
- Clique em + Regra.
- Coluna: escolha a coluna da tabela que vai ser comparada — ex.: pais_id.
- Operador: como comparar — igual, diferente, maior, contém, está na lista…
- Valor: com o que comparar. O tipo mais comum é Valor literal (você digita, ex.: 1).
- Confira o Preview do PHP gerado à direita e clique em Aplicar.
A janela de regras, parte por parte

Clique no print para ampliar.
Exemplo montado: pais_id = 1.
Os seis tipos de valor
O campo Valor tem um seletor de tipo. Ele decide de onde sai o valor da comparação:
| Tipo | Use quando |
|---|---|
| Valor literal | O valor é fixo e você já sabe qual é: 1, 'ativo', ou uma lista 1,2,3. |
| Parâmetro | O valor chega de fora, por quem abriu a tela. |
| Sessão do sistema | O valor é de quem está logado — unidade, empresa, usuário. |
| Data/hora | Comparar com hoje, começo do mês, ano corrente. |
| Código PHP | Nenhum dos anteriores resolve e você quer escrever a expressão. |
| Constante | O valor está numa constante do projeto. |
Várias regras juntas
- AND no Grupo raiz: todas as regras precisam ser verdadeiras (ativo e do meu estado).
- OR: basta uma ser verdadeira (matriz ou filial).
- + Grupo cria um bloco com regra própria dentro do bloco maior — é como usar parênteses numa conta.
- Subconsulta, na aba ao lado de Comparação direta, filtra por algo que está em outra tabela (ex.: só produtos que já foram vendidos).
Um combo filtrando o outro (cascata)
É o caso clássico: escolho o país e o combo de estado passa a mostrar só os estados daquele país. Quem faz isso é a seção Combo dependente, no campo filho — no exemplo, no campo estado.
- Clique no combo filho (o que precisa ser filtrado). Não é no pai.
- Abra a seção Combo dependente.
- Depende de: escolha o campo pai, aquele que a pessoa preenche antes.
- Coluna FK: escolha a coluna do filho que aponta para o pai — em estado, é pais_id.

Três níveis
País → estado → cidade funciona do mesmo jeito: configure a cascata em cada filho apontando para o seu pai imediato. Ao trocar o país, o estado recarrega e a cidade limpa junto, em efeito dominó.
Editando um registro que já existe
Quando a tela abre para editar, o pai já vem preenchido e o filho já vem com a lista certa — sem piscar nem exigir clique. Se o campo pai não for uma coluna da tabela (é o caso do país numa tela de cidade, que só existe via relação), quem monta a tela precisa preencher esse valor ao editar; sem isso, a cascata abre vazia no registro salvo.
Quando a pessoa não acha o que procura
A pessoa digita "Uruguai", não existe na tabela, e o combo fica vazio. A seção Sem resultados transforma esse beco sem saída em um botão de cadastro dentro do próprio dropdown. São dois modos, que podem ser ligados juntos ou separados.

| Modo | Escolha quando |
|---|---|
| Abrir formulário completo | O cadastro precisa de vários campos, validação e regras — cliente, produto, fornecedor. |
| Cadastro rápido inline | Basta o nome digitado, ou dois ou três campos — categoria, tag, tipo, país. |
Modo 1 — abrir o formulário completo
- Na seção Sem resultados, clique na engrenagem do card Abrir formulário completo.
- Formulário: escolha a tela de cadastro que deve abrir (ex.: EstadoForm).
- Método: já vem show, que é o método que abre a tela. Só mude se a sua tela usa outro.
- Em Aparência do botão, ajuste o texto (Label), o Ícone e a Classe CSS, se quiser.
- Clique em Salvar. O card passa a mostrar ATIVO.

Clique no print para ampliar.
Modo 2 — cadastro rápido, sem sair da tela
- Clique na engrenagem do card Cadastro rápido inline.
- Formulário de cadastro: escolha a tela dona da tabela (ex.: EstadoForm). O método de salvamento é gerado automaticamente nela — o campo Método já mostra o nome, tipo onQuickSaveEstado.
- Ajuste o botão em Aparência do botão, se quiser.
- Em Campos, decida o formato do cadastro: sem nenhum campo, o sistema salva só o texto digitado; clicando em Adicionar primeiro campo você monta um mini-formulário.
- Clique em Salvar.

Clique no print para ampliar.
Testar antes de entregar
Salve a tela e publique no Teste online. Confira nesta ordem:
| O que fazer | O que tem que acontecer |
|---|---|
| Abrir o combo | A lista aparece com os registros da tabela, na ordem escolhida. |
| Digitar parte de um nome | A lista filtra enquanto você digita. |
| Escolher o campo pai | O campo filho se preenche, já filtrado. |
| Trocar o pai | O filho limpa e carrega a lista nova. |
| Buscar algo que não existe | Aparece a mensagem e o botão de cadastro. |
| Salvar o formulário | O valor foi gravado na coluna certa. |
| Reabrir o registro salvo | Os combos voltam preenchidos, inclusive o filho. |
Problemas comuns
O combo aparece vazio
Confira nesta ordem: a tabela tem registros no ambiente que você está testando (o teste online tem banco próprio); existe uma regra de carregamento cortando tudo; ou o campo tem Depende de preenchido — nesse caso ele fica vazio de propósito até o pai ser escolhido.
Escolho o pai e o filho continua vazio
Quase sempre é a Coluna FK em branco na seção Combo dependente. Preencha com a coluna do filho que aponta para o pai.
{estado->pais_id}. Escrito assim ele nunca casa com o pai e a cascata não dispara. O par correto é depends-on="estado->pais_id" com depends-column="pais_id".O cadastro rápido dá erro ao salvar
A tabela pede um campo que o mini-formulário não tem. Adicione o campo na lista Campos, ou troque para o modo que abre o formulário completo.
A lista demora para abrir
Passou de algumas centenas de registros. Troque para DB Unique Search, que busca conforme a pessoa digita em vez de trazer tudo de uma vez.
Aparece o código em vez do nome
O Display está apontando para a coluna errada — provavelmente o id. Aponte para a coluna de nome/descrição.
Referência: painel × código
Para quem também mexe no Blade, este é o de-para entre o painel e os atributos gerados.
| No painel | No código | Padrão |
|---|---|---|
| Nome | name | — |
| Label | label | — |
| Database | database | banco principal |
| Tabela (Model) | model | — |
| Chave | key | id |
| Display | display | nome |
| Ordenar por + direção | order-by · order | asc |
| Regras de carregamento | :filters · :query | sem filtro |
| Depende de | depends-on | — |
| Coluna FK | depends-column | = depends-on |
| Obrigatório | required | false |
| Placeholder | placeholder | Selecione… |
| Texto de ajuda | hint | — |
| Mensagem (cabeçalho) | no-results-message | — |
| Abrir formulário completo | no-results-create-action | desligado |
| Cadastro rápido inline | no-results-quick-register-action | desligado |
| Campos do cadastro rápido | <mad-quick-form> | só o termo |
| Valor padrão | default | — |
| Somente leitura | readonly | — |
| On Change | mad:change | — |
| Largura | width | — |
| Abrir form — label · ícone · classe CSS | no-results-create-label · no-results-create-icon · no-results-create-class | — |
| Cadastro rápido — label · ícone · classe CSS | no-results-quick-register-label · no-results-quick-register-icon · no-results-quick-register-class | — |