0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クエリの結果を[rows]に入れる理由について。初心者備忘録

Posted at

はじめに

タイトルに書いてある通り
備忘録であり、初心者の記述ですのであまり参考にしないでください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);

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?