次のようなものがあると便利です。
knex.schema.dropTable('users', true);
//OR
knex.schema.cascade().dropTable('users');
生成します:
DROP TABLE users CASCADE;
.truncate
についても同じ
+1
これは方言固有です。 さらに悪いことに、 MySQLのドキュメントによると、 CASCADE
キーワードは許可されていますが、まったく何もしません。 (余談ですが、MySQLはCHECK
制約も黙って無視しますが、これは過去に私を苦しめました)。
この機能を含める場合(私が望む)、適切なCASCADE
実装がない方言のフォールバック実装が必要であるか、フォールバックを使用して実装する方法がない場合は、エラーが発生します。スローする必要があります。
たとえば、MySQLでは、 INFORMATION_SCHEMA.KEY_COLUMN_USAGE
をクエリして、各table_name + '.' + column_name
の組み合わせのノードと、 REFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME
からTABLE_NAME.COLUMN_NAME
までのエッジを持つデータベースの有向グラフを作成できます。 次に、グラフでトポロジカルソートを実行すると、ドロップ順序が表示されます。 私はこれを行いました、そしてそれはかなりうまくいきます。 INFORMATION_SCHEMA
を使用することの良い点は、実装がSQLダイアレクト間で移植可能でなければならないことです。 それが実際に真実であるかどうかは、まったく別の話です。
最も参考になるコメント
これは方言固有です。 さらに悪いことに、 MySQLのドキュメントによると、
CASCADE
キーワードは許可されていますが、まったく何もしません。 (余談ですが、MySQLはCHECK
制約も黙って無視しますが、これは過去に私を苦しめました)。この機能を含める場合(私が望む)、適切な
CASCADE
実装がない方言のフォールバック実装が必要であるか、フォールバックを使用して実装する方法がない場合は、エラーが発生します。スローする必要があります。たとえば、MySQLでは、
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
をクエリして、各table_name + '.' + column_name
の組み合わせのノードと、REFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME
からTABLE_NAME.COLUMN_NAME
までのエッジを持つデータベースの有向グラフを作成できます。 次に、グラフでトポロジカルソートを実行すると、ドロップ順序が表示されます。 私はこれを行いました、そしてそれはかなりうまくいきます。INFORMATION_SCHEMA
を使用することの良い点は、実装がSQLダイアレクト間で移植可能でなければならないことです。 それが実際に真実であるかどうかは、まったく別の話です。