著者:しょっさん
プログラミング言語「JavaScript」の実行環境「Node.js」と「Express」フレームワークを使って、基本となるWebアプリの開発手法を習得しましょう。第2回は「蔵書管理アプリケーション」を作成しながら、少し複雑なデータベースを扱う方法を紹介します。
シェルスクリプトマガジン Vol.56は以下のリンク先でご購入できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
'use strict'; module.exports = (sequelize, DataTypes) => { var Library = sequelize.define('Library', { book_title: DataTypes.STRING, author: DataTypes.STRING, publisher: DataTypes.STRING, image_url: DataTypes.STRING(2048) }, { underscored: true, }); Library.associate = function (models) { // 参照制約を示すときは、ここに記述。今回は1:nなので'hasMany'を使用 Library.hasMany(models.Comment, { foreignKey: 'book_id' }); }; return Library; }; |
1 2 3 4 5 6 7 8 9 10 11 |
book_id: { type: Sequelize.INTEGER, allowNull: false, foreignKey: true, references: { model: 'Libraries', key: 'id', }, onUpdate: 'RESTRICT', onDelete: 'RESTRICT', }, |
1 2 3 4 5 6 7 8 9 10 11 |
get_book: function (book_id) { return libraries.findOne({ where: { id: book_id }, include: [{ model: comments, required: false }] }); }, |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{ id: 1, book_title: 'title', author: 'しょっさん', publisher: 'USP研究所', image_url: 'http://example.com/', created_at: '2018-08-09T00:49:22.382Z', updated_at: '2018-08-09T00:49:22.934Z', Comments: [ { id: 1, comment: '#1へのコメント#1', book_id: 1, created_at: '2018-08-09T00:49:22.401Z', updated_at: '2018-08-09T00:49:22.401Z' }, { id: 2, comment: '#1へのコメント#2', book_id: 1, created_at: '2018-08-09T00:49:22.401Z', updated_at: '2018-08-09T00:49:22.401Z' }, { id: 3, comment: '#1へのコメント#3', book_id: 1, created_at: '2018-08-09T00:49:22.401Z', updated_at: '2018-08-09T00:49:22.401Z' } ] } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
get_contents: function () { return libraries.findAll({ attributes: ['id', 'book_title', 'author','publisher',[models.sequelize.fn('COUNT',models.sequelize.col('Comments.book_id')), 'cnt']], group: ['Library.id'], raw: true, subQuery: false, limit: 10, include: { model: models.Comment, attributes: [] }, }); }, |