2

私は、すべての特別な動作クエリを配置する「リポジトリ」ファイル (symfony2 ユーザー用) を作成する方法を理解しようとしています。

私は単純なdb shemaを持っています:

  • ユーザー(メール)
  • RelationType (名前)
  • UserXUserXRelation (fromUser、toUser、リレーション)

ユーザー Y の関係 X を持つユーザーを取得したいので、SQL では次のようになります。

var sql = 'SELECT u.email, u.id
FROM user u
INNER JOIN UserXUser uxu ON uxu.toUser_id = u.id
WHERE uxu.relation_id = 1 AND uxu.fromUser_id = '+id

このメソッドはどこに作成すればよいですか? db/shema.js と app/models/user.js で試してみましたが成功しませんでした。ここで見つかりましたJugglingDBで任意のmySQLクエリを使用していますか? 「クエリ」を使用するには、shema オブジェクトを使用する必要がありますが、どこでどのように使用できますか?

コールバックは次のようになりますか:

function(err, data) {...}

その場合、コード分離に関するベストプラクティスはありますか?

追加の質問: パラメータを PHP PDO の方法で jugglingdb にバインドする方法はありますか?

全てに感謝。

4

1 に答える 1

1

jugglingdb と Compoundjs を使用して、任意のクエリを実行できます。複合jsを使用している場合は、compound.models.user.schema.adapter.query(). 複合オブジェクトはユーザー モデルに解析される必要があります。つまり、他の多くのメソッドにアクセスできます。モデルでこのクエリを使用する方法は、ユーザー モデル内に次のコードでメソッドを作成することです。

var sql = 'SELECT u.email, u.id
FROM user u
INNER JOIN UserXUser uxu ON uxu.toUser_id = u.id
WHERE uxu.relation_id = 1 AND uxu.fromUser_id = '+id
compound.models.user.schema.adapter.query(sql, function(err, data) {
    if(error) {
        console.log(error)
    } else {
        //Enjoy your data
    }
})

これは jugglingdb のクォート エスケーパーをオーバーライドするため、SQL インジェクションに注意してください。id 変数がチェックされ、サニタイズされていることを確認してください。

于 2014-11-24T20:22:42.773 に答える