Skip to content

Database Datatable ​

You can look at src/engines/database_datatabe class which handles the conversion of your Model into a readable DataTable API response.

Query data ​

Source Data must respone as DatabaseQueryBuilderContract Class (run without await), then datatable class will execute query with condition request params from datatable.

ts
const users = db.from('users').select('*', db.raw("CONCAT(users.name,' ',users.email) as fullname"))

Via Service ​

ts
import datatables from '@adityadarma/adonis-datatables/services/main'
import DatabaseDataTable from '@adityadarma/adonis-datatables/engines/database_datatable'

return await datatables.of<DatabaseDataTable>(users)
    .setContext(ctx) // optional
    .addIndexColumn()
    .addColumn('count_transactions', (row: Record<string, any>) => {
        return row.id
    })
    .editColumn('name', (row: Record<string, any>) => {
        return row.name
    })
    .results()

Via Factory ​

ts
import { Datatables } from '@adityadarma/adonis-datatables'

return await Datatables.database(transactions)
    .setContext(ctx) // optional
    .addIndexColumn()
    .addColumn('count_transactions', (row: Record<string, any>) => {
        return row.id
    })
    .editColumn('name', (row: Record<string, any>) => {
        return row.name
    })
    .results()

Via Engine ​

ts
import DatabaseDataTable from '@adityadarma/adonis-datatables/engines/database_datatable'

return await new DatabaseDataTable(users)
    .setContext(ctx) // optional
    .addIndexColumn()
    .addColumn('count_transactions', (row: Record<string, any>) => {
        return row.id
    })
    .editColumn('name', (row: Record<string, any>) => {
        return row.name
    })
    .results()