問題タブ [bookshelf.js]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 2 つのテーブル間の双方向の関係を定義する適切な方法
私は3つのテーブルを持っています:
私のプロジェクトに属する人を見つけるには:
1. 私は自分の名前を持っているので、emp_id をクエリします。
2. emp_id を使用して、Projects で定義された belongsTo リレーションを使用して、Project_Allocation からすべてのプロジェクト (完了したものも含む) を照会 (withRelated) します
。 3. 次に、ステータスが「LIVE」のプロジェクトの pid を選択します
。 Project_allocation でこの pid を持つすべてのモデルを選択します。
私が遭遇している問題は、Project および Project_Allocation テーブルのスキーマを作成するときです。両方が互いに必要であり、両方をロードできません。これを書き直す方法を提案してください。
ここにいくつかの抜粋があります:
Project_Allocation ファイル:
プロジェクト ファイル:
node.js - Bookshelf.JS を使用して配列を EJS ビューに渡す
私の論理:
私の見解:
私が得ているもの:
私が得るべきもの:
私も通してみた
そしてまた
では、最終的にコレクションを EJS ビューに渡すにはどうすればよいでしょうか。
console.log(tags)
直後に( ) もログに記録then(function(tags)
し、モデル (この場合はタグ) を正しく取得しています。
EJSビューでtags.forEachも試しましたが、次のようなネイティブjavascript配列: [{tagId:1, name:"blah"}, {tagId:2, name"Foo"}]
「forEach」メソッドが実装されていません
node.js - bookshelf.js 多対多の関係が機能しない (belongsToMany)
bookshelf.js を使用して多対多の関係を構築できません。
モデル:
データベース テーブル「イベント」:
データベーステーブル「タグ」:
データベース テーブル "events_tags":
本来あるべきものを返さないクエリ:
ログ出力:
つまり、タグの空の配列です。これは間違っています。
質問: 私のコードに問題はありますか? 目的の出力は次のようになります。
これは質問には役に立ちませんが、とにかく投げます: 私は現在、Node JS のすべての ORM を嫌っています! たぶん、クエリビルダーを使用する必要があります。
javascript - Bookshelf.js/Knex.js は UTC DATETIME 列で「役に立ちすぎる」
MySQL テーブルがあり、このテーブルには というDATETIME
名前の列がありますdatetime_utc
。ご想像のとおり、UTC の日付と時刻です。私の Bookshelf モデルでは、Moment.js を使用してこれを ISO 8601 文字列形式に変換する仮想ゲッターを定義しました。私のモデルは次のようになります。
問題は、Bookshelf (またはそれを駆動する基礎となる Knex) がDATETIME
列を見ると、値をnew Date(...)
コードに渡す前に a でラップすることです。日付の値は UTC ですが、Date コンストラクターは値がサーバーのローカルの非 UTC タイムゾーンにあると想定しているため、正しい日付が間違ったタイムゾーンにある Date オブジェクトになってしまいます。Moment がこの Date で作業を開始すると、すべての値が一定時間ずれます。
Date オブジェクトを探し、日付コンポーネントを Moment コンストラクターに直接分解することで、この問題を回避しました。しかし、それはひどく感じます:
Bookshelf からラップされていないYYYY-MM-DD HH:MM:SS
文字列値を取得する、またはタイムゾーンを無視/UTC に変更して Date から新しい Moment オブジェクトを作成する簡単な方法はありますか?
bookshelf.js - Bookshelf モデルの属性として特定の関係またはクエリの種類を追加するにはどうすればよいですか?
私はしばらくの間 KnexJS を使用してきましたが、サーバー側のモデル クラスが少し複雑になり始めているため、BookshelfJS に移行したいと考えています。
多くの API サーバーで、関連するモデル (ドキュメントには多数のモデルがあり、多くのエディターに属しています) のリストをプリフェッチする必要がありますが、必ずしも全体をプリフェッチする必要はありません。理想的には、私は
今、これを行うには、ドキュメント定義で editors: belongsToMany(Profiles) を実行し、次に fetch().withRelated(['editors']) を実行しますが、問題は、それが完全な Profile オブジェクトを返すことですフェッチ。
これにより不要な結合 ( documents_editors join editors on editors.id = documents_editors.editor_id
) が生成され、クライアント アプリが期待する仕様に準拠します (ID が埋め込まれ、プロファイル自体が後で JSON 応答に追加されるのはオプションであり、実際には決してありません。 Document.relations を解析して、editor_ids 属性をそこに手動で押し込む必要があります。これにより、余分な時間が (ごくわずかに) 追加されます。
ですから、最終的にはやりたいことはできますが、エレガントではありません。理想的には、BookshelfJS には次のようなことができる何かがあります。
または、そこに knex スタイルのクエリを作成します。上記の特定のユースケースでは、生のクエリは一種のやり過ぎであることはわかっていますが、実際には、実行するのが面倒なクエリもいくつかあります。ユーザー コミュニティのメンバーシップと、コミュニティへのドキュメントのアクセス許可付与を追跡します。つまり、postgres スタイルの CTE を使用して、次のようなことを行います。
(編集者として直接追加されたか、編集アクセス権が付与されたコミュニティに属しているために、問題のユーザーが編集できる「コレクション」タイプのすべてのドキュメントを検索します)。
bluebird - .then の内容が終了するのを待ってから戻る
最初の .then が何も返さないのに約束を守らないのはなぜですか? 次の関数では、コンソールに次のように表示されます: blablabla ... ID のリスト
これは、最初の .then が実行される前に 2 番目の .then が実行されたことを意味します。
sql - Bookshelf を使用した Postgres マテリアライズド パス検索
管理チェーンを格納するために具体化されたパスを使用しているとしましょう:
すべての直属の部下を返すユーザー ID を指定してクエリを作成するにはどうすればよいですか。別の言い方をすれば、management_chain
最後から 2 番目の位置で照会された ID を含むすべてのレコードを取得する良い方法は何でしょうか (最後の項目がユーザー自身の ID を表す場合)。
つまり、次の SQL をどのように表現すればよいでしょうか。
私の現在のJS:
どのエラーが発生しますか
ReferenceError: id is not defined
postgresql - PostgreSQL で Knex.js を使用してカスケード ドロップを行うにはどうすればよいですか?
別のテーブル (ページ) によって参照されているテーブル (アプリケーション) を削除しようとすると、このエラーが発生します。
エラーは