# Hari 11: Sequelize ORM

Sebelum kita masuk ke materi database, kita siapkan tools nya dulu yah, yang dibutuhkan selain yang sudah kita install sebelumnya adalah MySQL, biar gak ribet installnya baik di Linux, Windows, atau Mac saya sama ratakan saja memakai XAMPP.

![https://raw.githubusercontent.com/AsrulLove/img-db/master/xampp.png](https://raw.githubusercontent.com/AsrulLove/img-db/master/xampp.png)

Bisa download [disini](https://www.apachefriends.org/index.html)

Jika sudah download pastikan MySQL berjalan dengan baik sehingga kita bisa membuka database di [http://localhost/phpmyadmin](http://localhost/phpmyadmin) (mungkin sedikit berbeda dilaptop Anda, silahkan disesuaikan), seperti berikut.

![https://raw.githubusercontent.com/AsrulLove/img-db/master/phpmyadmin.png](https://raw.githubusercontent.com/AsrulLove/img-db/master/phpmyadmin.png)

Sampai disitu, Anda sudah siap melanjutkan Express kembali.

### Model dan Sequelize

Pada 30 hari javascript kita akan membuat konsep MVC dimana kita akan pisahkan Model View dan Controller. Controller telah dibahas sebelumnya, dan saatnya sekarang kita bahas Model.

Model yang kita gunakan memakai library dari sequelize. Sequelize adalah ORM untuk NodeJs.

![https://miro.medium.com/max/1572/1*klzv0Ev8tTw7PafogculEQ.jpeg](https://miro.medium.com/max/1572/1*klzv0Ev8tTw7PafogculEQ.jpeg)

### Install Sequelize Cli

Tools command line atau cli yang dapat kita gunakan melalui terminal untuk menggenerate sequelize, maka Sequelize cli harus diinstall terlebih dahulu dengan cara.

```
npm i -g sequelize-cli

```

> Catatan: mungkin mac dan linux butuh sudo.

### Install Sequelize

Pada folder proyek `express-30-js` install sequelize dengan cara:

```
npm i sequelize

```

Sehingga `package.json` seperti berikut.

```
{
  "name": "express-30",
  "version": "1.0.0",
  "description": "belajar expres bersama asrul.dev",
  "main": "index.js",
  "scripts": {
    "test": "echo \\"Error: no test specified\\" && exit 1"
  },
  "author": "Asrul harahap",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1",
    "sequelize": "^5.21.3"
  }
}

```

### Initisalize Sequelize

Agar proyek dikenali menggunakan sequelize, lakukan perintah berikut.

```
sequelize init

```

Perhatikan gambar berikut.

![https://raw.githubusercontent.com/AsrulLove/img-db/master/sequelize-init.png](https://raw.githubusercontent.com/AsrulLove/img-db/master/sequelize-init.png)

Maka akan menghasilkan folder seeders, models, dan config.

### Koneksi Database

Database yang kita gunakan adalah MySQL, untuk menjalankan mysql, sequelize membutuhkan library tambahan yaitu `mysql2`. Install dengan cara.

```
npm i mysql2

```

Sehingga file `package.json` menjadi seperti berikut.

```
{
  "name": "express-30",
  "version": "1.0.0",
  "description": "belajar expres bersama asrul.dev",
  "main": "index.js",
  "scripts": {
    "test": "echo \\"Error: no test specified\\" && exit 1"
  },
  "author": "Asrul harahap",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1",
    "mysql2": "^2.1.0",
    "sequelize": "^5.21.3"
  }
}

```

Konfigurasi database dengan membuka file `config.json` dan sesuaikan dengan MySql Anda. Kira-kira seperti ini.

```
{
  "development": {
    "username": "root",
    "password": "",
    "database": "db_30_hari",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false
  }
}

```

Sesuai dengan file `config.json`, buat database dengan nama **db_30_hari**. Perhatikan gambar berikut.

![https://raw.githubusercontent.com/AsrulLove/img-db/master/new-db.png](https://raw.githubusercontent.com/AsrulLove/img-db/master/new-db.png)

### Membuat Model

Setelah database dibuat, kita pindah ke terminal untuk membuat Model, pada contoh ini nama model yang kita buat adalah **User**.

```
sequelize-cli model:generate --name User --attributes name:string,label:string,picture:string,email:string,phone:string,website:string,summary:string

```

Perhatigan gambar berikut

![https://raw.githubusercontent.com/AsrulLove/img-db/master/model-user.png](https://raw.githubusercontent.com/AsrulLove/img-db/master/model-user.png)

Akan menghasilkan file dengan nama `user.js` pada folder model yang hasilnya seperti berikut.

```
"use strict";
module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define(
    "User",
    {
      name: DataTypes.STRING,
      label: DataTypes.STRING,
      picture: DataTypes.STRING,
      email: DataTypes.STRING,
      phone: DataTypes.STRING,
      website: DataTypes.STRING,
      summary: DataTypes.STRING,
    },
    {}
  );
  User.associate = function (models) {
    // associations can be defined here
  };
  return User;
};

```

### Migrate Model

Model yang telah dibuat, hanya sebtas file saja. Untuk mengubah file model ke tabel pada database maka lakukan migrate db dengan perintah berikut.

```
sequelize-cli db:migrate

```

Maka akan menghasilkan seperti berikut.

![https://raw.githubusercontent.com/AsrulLove/img-db/master/hasil-generate.png](https://raw.githubusercontent.com/AsrulLove/img-db/master/hasil-generate.png)

Sekarang model dan tabel sudah selesai, kita siap untuk melakukan CRUD terhadap data tabel yang telah kita miliki.
