@harnessflex/schema-builder v0.0.6
Schema Builder
A Laravel inspired schema builder for Harness Flex and DB Migrate.
Install
This package is automatically installed with the Harness Flex Framework.
npm i @harnessflex/schema-builder
Basic Usage
Schema Builder works on both JavaScript
based projects and imba
based projects.
JavaScript
const { columns, id, foreign, string, longText, timestamps, softDeletes, timestamp } = require('@harnessflex/schema-builder')
exports.up = function (db) {
return db.createTable('posts', columns([
id(),
foreign('user_id').references('id').on('users').onDelete('cascade'),
string('title'),
longText('body'),
string('slug').unique(),
timestamp('published_at').nullable(),
softDeletes(),
timestamps(),
])
}
Imba
const { columns, id, foreign, string, longText, timestamps, softDeletes, timestamp } = require '@harnessflex/schema-builder'
exports.up = do(db)
db.createTable 'posts', columns [
id!
foreign('user_id').references('id').on('users').onDelete 'cascade'
string 'title'
longText 'body'
string('slug').unique!
timestamp('published_at').nullable!
softDeletes!
timestamps!
]
Modifying Tables
To add a new column
to an existing table, use the add
helper method:
const { string, add } = require('@harnessflex/schema-builder')
...
exports.up = function (db) {
return add( string('api_key').nullable().after('password') )
.whereTable('users')
.using(db)
};
And to change a column in an existing table, use the change
helper method:
const { change, longText } = require('@harnessflex/schema-builder')
...
exports.up = function (db) {
return change( longText('api_key').nullable() )
.whereTable('users')
.using(db)
};
Both, the
add
andchange
methods, return aChangeColumn
instance.
Columns
Column | Params | Type | Unique Constraint Support |
---|---|---|---|
bigIncrements | name: string | Column | ☑ |
bigInteger | name: string | Column | ☑ |
binary | name: string | Column | ☑ |
blob | name: string | Column | ☐ |
boolean | name: string | Column | ☑ |
char | name: string | Column | ☑ |
date | name: string | Column | ☑ |
dateTime | name: string | Column | ☑ |
decimal | name: string | Column | ☑ |
foreign | name: string | ForeignColumn | ☐ |
id | Column | ☑ | |
integer | name: string | Column | ☑ |
longText | name: string | Column | ☐ |
real | name: string | Column | ☑ |
smallInteger | name: string | Column | ☑ |
softDeletes | Column | ☑ | |
string | name: string | Column | ☑ |
text | name: string | Column | ☐ |
time | name: string | Column | ☑ |
timestamp | name: string | Column | ☑ |
timestamps | currentTimeStamp: boolean | object | ☑ |
Other
Method | Params | Description |
---|---|---|
add | column: Column or ForeignColumn | Add a new column to an existing table. |
change | column: Column or ForeignColumn | Change a column in an existing table. |
columns | columns: array | A collection of columns. |
schema | columns: array | A collection of columns. |
API
ForeignColumn
Method | Params | Description |
---|---|---|
references | column: string | Reference column of another table. |
on | table: string | Reference table. |
onDelete | rule: string | Add onDelete rule. |
onUpdate | rule: string | Add onUpdate rule. |
JavaScript and Imba
foreign('user_id').references('id').on('users').onDelete('cascade')
Column
Method | Params | Description |
---|---|---|
after | column: string | Add column after another column. |
length | length: integer | Set column length. |
primary | primary: boolean | Set column as primary key. |
autoIncrement | increment: boolean | Add auto increment attribute. |
nullable | nullable: boolean | Mark column nullable. |
unique | isUnique: boolean | Mark column unique. |
unsigned | isUnsigned: boolean | Mark column unsigned. |
default | value: mixed | Set column default value. |
JavaScript
return db.createTable('users', columns([
id(),
string('name'),
string('email').unique(),
string('password'),
timestamp('email_verified_at').nullable(),
timetamps(),
]))
Imba
db.createTable 'users', columns [
id!
string 'name'
string('email').unique!
string 'password'
timestamp('email_verified_at').nullable!
timetamps!
]
ChangeColumn
Method | Params | Description |
---|---|---|
where | table: string | Set table name. |
whereTable | table: string | Set table name. |
using | db: object | Add/change column and return db-migrate db instance. |
JavaScript
return change( longText('api_key').nullable() )
.whereTable('users')
.using(db)
Imba
change( longText('api_key').nullable! )
.whereTable('users')
.using db
Example (JavaScript)
Before running the example project, edit the database.json
config file located under the example
folder.
When done, run the following command:
db-migrate up -m=example/migrations
This command will create 2 new tables named users
and posts
in your database.
Note:
db-migrate
anddb-migrate-mysql
must be installed globally.
Security
If you discover any security related issues, please email donaldpakkies@gmail.com instead of using the issue tracker.
License
The MIT License (MIT). Please see License File for more information.