.query()
Sails v1.0 以降、このメソッドは非推奨になりました。代わりに、
Model.getDatastore().sendNativeQuery()
を使用してください。これは、SQL エスケープバインディングの形式を標準化し、.exec()
および Promise ベースの使用を完全にサポートする、このメソッドの新しいバージョンです。
指定されたモデルのデータストアを使用して、生の SQL クエリを実行します。
SomeModel.query(sql, valuesToEscape, function(err, rawResult) {
});
警告: 他の Waterline モデルメソッドとは異なり、
.query()
は Promise ベースの使用も.exec()
の使用もサポートしていません。つまり、Waterline の通常の遅延オブジェクトメカニズムを利用しません。代わりに、基盤となるデータベースドライバーへの生のアクセスを直接提供します。
.query()
は、SQL データベース(例:PostgreSQL や MySQL)を使用するように構成された Sails/Waterline モデルでのみ使用できます。その目的は、生の SQL クエリを実行することです。正確な使用法と結果の形式はアダプターによって異なるため、基盤となるデータベースドライバーのドキュメントを参照する必要があることに注意してください。(開始に役立ついくつかの簡単な例を以下に示します。)
引数 | タイプ | 詳細 | |
---|---|---|---|
1 | sql | このモデルのデータベースに適した方言で記述された SQL 文字列。テンプレート構文 (例: ? , $1 ) を使用できます。正確なスタイルは、基盤となるデータベースアダプターによって異なります。(以下の例を参照してください。) |
|
2 | valuesToEscape | このモデルのデータベースに適したテンプレート構文を使用して、SQL エスケープを行い、SQL 文字列内に挿入する、動的な信頼できない文字列の配列。(挿入する動的な値がない場合は、ここで空の配列を使用してください。) | |
3 | done | クエリが正常に完了したとき、またはアダプターがエラーを検出したときにトリガーされるコールバック関数。 |
引数 | タイプ | 詳細 | |
---|---|---|---|
1 | err | 発生したエラー。エラーがなかった場合は falsey 値。(このエラーの正確な形式は、渡した SQL クエリと使用しているデータベースアダプターによって異なります。関連ドキュメントへのリンクについては、以下の例を参照してください。) | |
2 | rawResult | アダプターからの生の出力。(この生の出力データの正確な形式は、渡した SQL クエリと使用しているデータベースアダプターによって異なります。関連ドキュメントへのリンクについては、以下の例を参照してください。) |
使用法と結果のデータは、送信する SQL クエリと使用しているアダプターによって異なることに注意してください。以下に、PostgreSQL 用と MySQL 用の 2 つの例を示します。
PostgreSQL データベースとの通信に使用される NPM パッケージである pg
と直接通信します
Pet.query('SELECT pet.name FROM pet WHERE pet.name = $1', [ 'dog' ] ,function(err, rawResult) {
if (err) { return res.serverError(err); }
sails.log(rawResult);
// (result format depends on the SQL query that was passed in, and the adapter you're using)
// Then parse the raw result and do whatever you like with it.
return res.ok();
});
Pet
モデルが sails-mysql
アダプターを使用するように構成されていると仮定すると、次のコードは、MySQL データベースとの通信に使用される NPM パッケージである mysql
と直接通信します。
Pet.query('SELECT pet.name FROM pet WHERE pet.name = ?', [ 'dog' ] ,function(err, rawResult) {
if (err) { return res.serverError(err); }
sails.log(rawResult);
// ...grab appropriate data...
// (result format depends on the SQL query that was passed in, and the adapter you're using)
// Then parse the raw result and do whatever you like with it.
return res.ok();
});