はじめに
タイトルに書いてある通り
備忘録であり、初心者の記述ですのであまり参考にしないでくださいw
コメントいただけると勉強になりますので、どしどしください。
内容
以下ような記述がコードレビュー中に見つけた。
[rows]という変数にデータを代入するのにも違和感があり、色々調べてなんとなくわかったのでまとめます。
param = プレースホルダー用パラメーター;
query = クエリ;
// クエリ実行
const [rows] = await this.pool.query(query, params);
// モデルを使用してフォーマット
return モデル名.formatMethod(rows);
rowsだけをモデルに引数で渡している。
さっそく
// resultにクエリの結果を代入
const result = await db.pool.query("SELECT * FROM users");
console.log(result);
こんな感じで通常なら取得すると思うけどこれのコンソールの結果を見るとわかる。
[
[ // ← rows(実際のデータ)
{ id: 1, name: 'Taro' },
{ id: 2, name: 'Jiro' }
],
[ // ← fields(カラム情報)
{ name: 'id', columnType: ... },
{ name: 'name', columnType: ... }
]
]
クエリの結果は多重配列になっており第一引数側にクエリの結果のデータが格納されている。
そのため[rows]にすることで第一引数のデータだけを取得できる。
他の書き方
理屈がわかったので色々他の書き方もわかるとは思うがメモ!
①そのまま受け取って[0]だけを渡す。
const result = await db.pool.query("SELECT * FROM users");
// ①rowsのデータ=[0]
return モデル名.formatMethod(result[0]);
②データとカラムとそれぞれに引数を準備する。
const [rows,fields] = await db.pool.query("SELECT * FROM users");
// ①rowsだけでなくfieldsも使えるようにする。
return モデル名.formatMethod(rows);