Ramon
Ramon

Reputation: 49

How to get a value from a form to make a query in AdonisJs?

I'm coding a search form to get some data from database I don't know what am i doing wrong. The page just refreshes and nothing happens.

1- I have a form with a input called "term"

2- My route: Route.get('/telefone', 'TelefoneController.show')

MY CONTROLLER

async show ({ params, request, response, view }) {
    const term = request.input('term');

    const nome = await Telefone.query().where('atendente', 'LIKE', 
    '%'+term+'%').fetch()
    console.log(nome);

    return view.render('telefone', {
      nome: nome,

   })   
  }

MY HTML

<div class="container d-flex">
    <form action="{{ route('/telefone')}}" method="get" class="col-sm-8">
      <div class="form-group">
        <label for="campotel">Buscar Nome</label>
        <input type="text" name="term" class="form-control" id="campotel" placeholder="Digite o nome do funcionário">
        </div>


      <button type="submit" class="btn btn-success float-right">Buscar</button>

    </form>


  </div>

DB STRUCTURE

    class TelefoneSchema extends Schema {
      up () {
        this.create('telefones', (table) => {
          table.increments()
          table.string('ramal')
          table.string('voip')
          table.string('atendente')
          table.integer('id_departamento')
          .unsigned()
          .references('id')
          .inTable('departamentos')
          .onUpdate('CASCADE')
          .onDelete('CASCADE')
          table.integer('id_polo_telefone')
          .unsigned()
          .references('id')
          .inTable('polos')
          .onUpdate('CASCADE')
          .onDelete('CASCADE')
          table.timestamps()
        })
      }

      down () {
        this.drop('telefones')
      }
    }
    module.exports = TelefoneSchema

page just refresh and nothing happens

Upvotes: 1

Views: 2747

Answers (1)

crbast
crbast

Reputation: 2302

I tried on my side without being able to reproduce the case.

But I have some information that might perhaps help you:

  1. When the query returns no value the result is null. -> make sure your db have values

  2. My test code (work fine):

My controller:

'use strict'

const Telefone = use('App/Models/Telefone')

class TelefoneController {
    async show ({ params, request, response, view }) {
        const term = request.input('term')

        console.log(term)
        const result = await Telefone.query().where('atendente', 'like', 
        '%'+term+'%').fetch()
        const nome = result.toJSON()
        console.log(nome) // Return JSON array

        return view.render('welcome', {
          nome: nome,
       })   
    }
}

module.exports = TelefoneController

My schema (I don't use all your datas) :

class TelefoneSchema extends Schema {
  up () {
    this.create('telefones', (table) => {
      table.increments()
      table.string('ramal')
      table.string('voip')
      table.string('atendente')
      table.timestamps()
    })
  }

  down () {
    this.drop('telefones')
  }
}

My view :

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <title>Hello Adonis</title>
</head>
<body>
<h1>Ramal : {{ nome[0].ramal }}</h1>
  <div class="container d-flex">
    <form action="{{ route('/telefone')}}" method="get" class="col-sm-8">
      <div class="form-group">
        <label for="campotel">Buscar Nome</label>
        <input type="text" name="term" class="form-control" id="campotel" placeholder="Digite o nome do funcionário">
        </div>
      <button type="submit" class="btn btn-success float-right">Buscar</button>
    </form>
  </div>
</body>
</html>

I hope it might help you a little bit.

Upvotes: 1

Related Questions