MAD Lab
/
Tutor > Campos ligados a banco > Busca (DB)

Busca (DB)

Campos ligados a banco

mad-dbunique-search-field mad-dbmulti-search-field mad-dbseek-field
Busca AJAX (DB)

mad-dbunique-search-field faz TomSelect com busca AJAX no servidor — pensado para listas grandes (aqui os 40 clientes da fixture).

resources/views/tutor/examples/db-busca/dbunique-search.blade.php
<mad-dbunique-search-field name="cliente_unique_id" label="Cliente"
    model="TutorDemoCliente" database="business"
    display="{nome} - {email}" order-by="nome"
    min-length="2" placeholder="Buscar cliente..." />
Busca AJAX + auto-preenchimento

mad-dbunique-search-field também aceita &lt;fill&gt; filhas — selecionar o cliente preenche e-mail e UF sem round-trip extra do form.

E-mail (auto-preenchido)
UF (auto-preenchida)
resources/views/tutor/examples/db-busca/dbunique-search-fill.blade.php
<mad-form-grid :cols="2">
    <mad-dbunique-search-field name="cliente_busca_fill_id" label="Cliente"
        model="TutorDemoCliente" database="business"
        display="{nome}" order-by="nome"
        min-length="2" placeholder="Buscar cliente...">
        <fill field="email_busca_preenchido" from="email" />
        <fill field="uf_busca_preenchido" from="uf" transform="upper" />
    </mad-dbunique-search-field>
    <mad-display-field name="email_busca_preenchido" label="E-mail (auto-preenchido)" />
    <mad-display-field name="uf_busca_preenchido" label="UF (auto-preenchida)" />
</mad-form-grid>
Multi-busca AJAX (DB)

mad-dbmulti-search-field em mode=&quot;comma&quot; — chips com busca no servidor, ids salvos como CSV.

resources/views/tutor/examples/db-busca/dbmulti-search.blade.php
<mad-dbmulti-search-field name="categorias_tags" label="Categorias (tags)"
    model="TutorDemoCategoria" database="business"
    display="{nome}" order-by="nome" mode="comma" />
Seek field (modal)

mad-seek abre uma busca em modal (grid paginada, colunas + auto-fill com &lt;mad-fill&gt;) — é a tag declarativa recomendada; ela compila para mad-dbseek-field por baixo (mad-dbseek-field puro é &quot;raramente usado direto&quot;, ver doc seek).

E-mail (preenchido)
Cidade (preenchida)
resources/views/tutor/examples/db-busca/dbseek.blade.php
<mad-seek model="TutorDemoCliente" name="cliente_seek_id" label="Cliente (busca em modal)" display="nome" database="business"
    placeholder="Buscar cliente (abre modal)..." modal-title="Buscar cliente" modal-size="lg" per-page="10">
    <mad-column field="id" label="Cód." width="70" sortable />
    <mad-column field="nome" label="Nome" sortable />
    <mad-column field="cidade" label="Cidade" />
    <mad-column field="uf" label="UF" width="70" />

    <mad-fill target="cliente_seek_email" source="email" />
    <mad-fill target="cliente_seek_cidade" source="cidade" />
</mad-seek>
<mad-form-grid :cols="2">
    <mad-display-field name="cliente_seek_email" label="E-mail (preenchido)" />
    <mad-display-field name="cliente_seek_cidade" label="Cidade (preenchida)" />
</mad-form-grid>
Divergência entre mad_validate e o uso real
O lint (mad_validate, regra R045) e o schema de mad_props para mad-dbunique-search-field e mad-dbseek-field não reconhecem model/database/display/order-by como props válidas — mas skills/_cheats/f-select.cheat.md, skills/_templates/crud-with-detail.md, skills/_cheats/detail.cheat.md, skills/_templates/db-blocks-shares.md e skills/_data/INDEX.md usam exatamente essas props de forma consistente (inclusive em templates de scaffold de produção). Os exemplos desta página seguem essa evidência de uso real; o aviso do lint para estas duas tags pode ser ignorado com segurança — reportado ao dono do catálogo para corrigir o schema.
Código-fonte completo da página
app/control/Tutor/TutorDbBusca.php
<?php

namespace App\Control\Tutor;

use App\Support\Tutor\TutorPage;

class TutorDbBusca extends TutorPage
{
    protected string $catalogKey = 'db_busca';
}
resources/views/tutor/db/busca.blade.php
<x-tutor-page page="db_busca">
    <x-tutor-demo demo="tutor.examples.db-busca.dbunique-search"
        title="Busca AJAX (DB)" desc="mad-dbunique-search-field faz TomSelect com busca AJAX no servidor — pensado para listas grandes (aqui os 40 clientes da fixture)." />

    <x-tutor-demo demo="tutor.examples.db-busca.dbunique-search-fill"
        title="Busca AJAX + auto-preenchimento" desc="mad-dbunique-search-field também aceita &lt;fill&gt; filhas — selecionar o cliente preenche e-mail e UF sem round-trip extra do form." />

    <x-tutor-demo demo="tutor.examples.db-busca.dbmulti-search"
        title="Multi-busca AJAX (DB)" desc="mad-dbmulti-search-field em mode=&quot;comma&quot; — chips com busca no servidor, ids salvos como CSV." />

    <x-tutor-demo demo="tutor.examples.db-busca.dbseek"
        title="Seek field (modal)" desc="mad-seek abre uma busca em modal (grid paginada, colunas + auto-fill com &lt;mad-fill&gt;) — é a tag declarativa recomendada; ela compila para mad-dbseek-field por baixo (mad-dbseek-field puro é &quot;raramente usado direto&quot;, ver doc seek)." />

    <mad-callout type="info" title="Divergência entre mad_validate e o uso real" icon="info">
        O lint (<code>mad_validate</code>, regra R045) e o schema de <code>mad_props</code> para
        <code>mad-dbunique-search-field</code> e <code>mad-dbseek-field</code> não reconhecem
        <code>model</code>/<code>database</code>/<code>display</code>/<code>order-by</code> como props
        válidas — mas <code>skills/_cheats/f-select.cheat.md</code>,
        <code>skills/_templates/crud-with-detail.md</code>, <code>skills/_cheats/detail.cheat.md</code>,
        <code>skills/_templates/db-blocks-shares.md</code> e <code>skills/_data/INDEX.md</code> usam
        exatamente essas props de forma consistente (inclusive em templates de scaffold de produção).
        Os exemplos desta página seguem essa evidência de uso real; o aviso do lint para estas duas
        tags pode ser ignorado com segurança — reportado ao dono do catálogo para corrigir o schema.
    </mad-callout>
</x-tutor-page>