タグ付けされた質問 「database」

Drupalは、データベースサーバーにアクセスするための、ベンダーに依存しない標準の抽象化レイヤーを提供します。

1
削除されたフィールドを復元する
それぞれが用語参照である4つのフィールドを持つコンテンツタイプがあります。100個のノードがあり、それぞれに4つの用語参照が割り当てられています。私は誤ってこれらのフィールドの1つをadmin> structure> content-types> mycontent-type ...から削除しました。その結果、100個のノードすべてが、この失われたフィールドに含まれる用語参照を失っています。 データベース管理モジュールをインストールした後、削除したフィールドのデータベースがまだ存在していることがわかりました。「field_deleted_field_74」のような名前に変更されていました。 mysqlを使用して、このデータベースの名前を「field_data_field_originalname」に戻すことができました。つまり、削除されたフィールドに元のマシン名を使用しています さらに、このデータベース内の削除された列の値を「1」から「0」に切り替えることができました。 私は、「field_revision_field_74」のような名前が付けられていることがわかった他の「ゴースト」データベースで上記を実行しました... 名前を変更したフィールドが、コンテンツタイプの管理フィールドの表示や、admin> reports> fieldsリストに既存のフィールドとして表示されないのが私の問題です。「drush field-info fields」を実行すると、それも欠落しています。 元に戻す方法は?編集が必要なデータベースを参照している別のデータベースがあると想定しています。 ありがとう!

7
hook_views_query_alter()の `GROUP BY`が機能しないのはなぜですか?
私はViews 7.x-3.6を使用GROUP BYしhook_views_query_alter()ていますが、次のように句を変更してみました。 function mymodule_views_query_alter(&$view, &$query) { if ($view->name == "view_name"){ $query->add_groupby('field_name'); dpm($query); } } 私が見ると$query、句が正しく有効になっているが、SQLクエリは影響を受けません:句は表示されません。groupbyGROUP BY 私が最終的に行ったのは、Drupalコアフック(hook_query_alter())を使用することで、正常に機能しました。SQLが影響を受けています。 function mymodule_query_alter(QueryAlterableInterface $query) { $view_name = 'view_name'; if ($query->hasTag('views_' . $view_name)) { $query->groupBy('field_name'); } } 私hook_views_query_alter()が機能しない理由は何ですか?それを行うためのよりクリーンな方法があるかどうかと思います。
11 7  database  views 

1
EntityFieldQueryは本当にこれは非効率ですか?
私はEntity APIの初心者ですが、それを解決しようとしています。私は、さまざまなフィールドが付加された多数のコンテンツタイプを使用するサイトで作業しています。派手なものは何もない。したがって、一連のエントリを取得したい場合、私は無知で、データベースを直接呼び出して、次のようなことをしています。 $query = db_select('node', 'n')->extend('PagerDefault'); $query->fields('n', array('nid')); $query->condition('n.type', 'my_content_type'); $query->leftJoin('field_data_field_user_role', 'role', 'n.nid = role.entity_id'); $query->condition('role.field_user_role_value', $some_value); $query->leftJoin('field_data_field_withdrawn_time', 'wt', 'n.nid = wt.entity_id'); $query->condition('wt.field_withdrawn_time_value', 0); $query->orderBy('n.created', 'desc'); $query->limit(10); $result = $the_questions->execute()->fetchCol(); (はい、私はおそらくこれらの行の束を単一の$the_questions->ステートメントに折りたたむことができます; plsは今のところそれを無視します。) EntityFieldQueryでこれを書き換えようとすると、次のようになります。 $query = new EntityFieldQuery(); $query ->entityCondition('entity_type', 'node') ->entityCondition('bundle', 'my_content_type') ->fieldCondition('field_user_role', 'value', $some_value) ->fieldCondition('field_withdrawn_time', 'value', 0) ->propertyOrderBy('created', 'desc') …
11 7  database  entities 

2
新しいテーブルをhook_update_N()で作成する必要がありますか?
で新しいテーブルを作成するときhook_schema()、そのテーブルもに追加する必要がありますhook_update_N()か?または、databae-updatesが自動的にテーブルを追加するようにするためのいくつかのトリック、または私が見逃したものはありますか? hook_update_N()のドキュメントはhook_schema()、新しいテーブルの導入について何も説明していませんが、のドキュメントは次のように述べています: このフックによって宣言されたテーブルは、モジュールが最初に有効になったときに自動的に作成され、モジュールがアンインストールされたときに削除されます。 (ハイライトは私のものです) そうである場合、hook_update_N()とhook_schema()の両方で新しいテーブルのスキーマ定義が重複しないようにする方法。単にスキーマを次のように参照します。 function hook_update_N(&$sandbox) { $schema = hook_schema(); $name = "foo"; $table = $schema["foo"]; db_create_table($name, $table); } 機能しているようですが、ユーザーが更新を実行して2つ以上のhook_update_N()を実行すると、テーブルを再度変更すると失敗します。結局のところ、最初のhook_update_Nは既に正しいデータベースをインストールしており、2番目のhook_update_M()はすでに最新の列を追加/変更/変更しようとします。 これにどう対処しますか?


1
フィールドコレクションとパラグラフ
以前のサイトでField Collectionを使用していて、パフォーマンスの問題に直面したため、今回はField Collectionの代替案を探しています。私はフィールドコレクションの代替案を見つけます。 しかし、私はこれらの解決策がどのように特別に異なっているか、または類似しているかについてはあまり見つけることができません[ フィールドコレクションとパラグラフ ]。 多分誰かが説明するのを手伝ってくれる?だから私は良い決断をすることができます。

2
Drupalマスター/スレーブレプリケーション
drupalデータベース用にマスター/スレーブレプリケーションを備えた2つのMySQLサーバーをセットアップし、データベースが同期して複製されていることを確認しました。 私は今、基本的にフェイルオーバー/冗長性の目的で両方のデータベースをdrupalに向けようとしています。つまり、プライマリデータベースサーバーを再起動する必要がある場合、サイトを停止させたくありません。(読み取り専用にすることは、障害シナリオの間は許容されます) 次の記事に基づく。私はsettings.php次のように変更しました: $databases['default']['default'] = array( 'driver' => 'mysql', 'database' => 'sdrupal', 'username' => 'drupal', 'password' => 'topsecret', 'host' => 'masterdb.ptp.local', ); $databases['default']['slave'][] = array( 'driver' => 'mysql', 'database' => 'sdrupal', 'username' => 'drupal', 'password' => 'topsecret', 'host' => 'slavedb.ptp.local', ); マスターをシャットダウンする(mysqldサービスを停止する)まで設定は問題ありません。そうすると、サイトが起動します。 PDOException:SQLSTATE [HY000] [2013]「初期通信パケットの読み取り」でMySQLサーバーへの接続が失われました。システムエラー:drupal_is_denied()で111(/www/includes/bootstrap.incの1895行目)。追加 PDOException:SQLSTATE [HY000] [2013]「初期通信パケットの読み取り」でMySQLサーバーへの接続が失われました。システムエラー:dblog_watchdog()で111(/www/modules/dblog/dblog.moduleの行141)。 これを機能させるコツは何ですか?

2
致命的なエラー:未定義の関数cache_get()の呼び出し[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 サーバーで次のエラーが発生します Fatal error: Call to undefined function cache_get() in includes/module.inc on line 665 Drush command terminated abnormally due to an unrecoverable error. [error] Error: Call to undefined function cache_get() in includes/module.inc, line 665 これを修正するには?
10 7  caching  database 

7
Acquia Dev Desktopデータベース設定を探しています
私が使用していますAcquiaの狙いDevのデスクトップをローカルDrupalのインストールを作成します。また、Bluehostをサービスとして使用しています。残念ながら、BluehostはDrupalテーブルにテーブルプレフィックスを使用します。 したがって、BlueHostからローカルに何かをインポートする場合は、テーブルプレフィックスをに設定する必要がありますsettings.php。 array( 'driver' => 'mysql', 'database' => 'databasename', 'username' => 'username', 'password' => 'password', 'host' => 'localhost', 'port' => 3306, 'prefix' => 'myprefix_', 'collation' => 'utf8_general_ci', ); 残念ながら、ローカルのAcquia MySqlデータベースの適切なデータベース設定が見つかりません。Acquiaはsetting.php新しいシステムでもファイルを作成しません。 誰かがそれらの設定を知っていますか?ありがとう。

2
InnoDBに移行する必要がある、または移行できるテーブルと、MyISAMのままにする必要があるテーブルはどれですか。
タイトルどおり:InnoDBに移行するテーブルの候補のクイックリストはありますか?そしてMyISAMのままにしておくべきもの。 いくつかの追加情報 サイトの読み取り負荷はかなり重いですが、タグなどを含めて、1時間あたり約10ノードが挿入されます。 CCK(の形式の正規化された大量のテーブルcontent_field%)を多用しています。 また、すべてのブロックとページにビューを使用しています。しかし、それらの多くはカスタムモジュールでの置換の候補です(データベースクエリとそれらのクエリの重さを減らすため)。 ユーザーはすべて匿名です。いくつかのログインした編集者とウェブマスターを除いて。

2
カスタムモジュールで外部データベース接続を定義して使用する方法
外部データベースクエリに大きく依存するモジュールを開発しています。モジュール全体で外部データベース接続を定義して使用するためのベストプラクティスはありますか? このページでは、接続を確立する方法を示していますが、モジュール(特定のフック?)のどこに接続するかは示していないため、一度定義するだけで済みます。また、常に「db_set_active( 'YourDatabaseKey');」を実行する必要がありますか?または、使用するdbを設定する引数を渡すことはできますか?私はDrupal 7を使用しています。
10 7  database 

5
DrupalデータベースinnodbまたはMyISAM?
Drupalサイトを持っていますが、パフォーマンスの問題が発生しています。データベースをMyISAMからInnoDBに変換するにはどうすればよいですか。切り替えることでパフォーマンスが向上する可能性があることを示します。 MySQLデータベースがInnoDBかMyISAMかを確認するにはどうすればよいですか?

1
結合を使用したdb_update()
db_update()次のクエリのための方法はありますか? UPDATE field_data_field_TEST as ft left join node as n on ft.entity_id = n.nid set n.type='test' where n.type='foo' 使ってみましたdb_update()->join();がうまくいきませんでした。
9 7  database 

3
Drupal 7 db_select()の条件文でSQL関数を使用する
変数との列比較を小文字で比較することを強制するSQL WHERE句に条件を書き込もうとしています。ただし、addExpression関数はこれを実行していません(式がフィールド句ではなく、where句に配置されているため)。 これが私が試したものです: $category = 'mobile wifi'; $query = db_select('taxonomy_term_data', 'ttd') ->fields('ttd', array('tid')); $query->innerJoin('taxonomy_vocabulary', 'tv', 'ttd.vid = tv.vid'); $query->addExpression("LOWER(ttd.name) = $category"); $result = $query->condition('machine_name', 'images_cat', '=') ->execute() ->fetchAssoc(); この: $category = 'mobile wifi'; $query = db_select('taxonomy_term_data', 'ttd') ->fields('ttd', array('tid')); $query->innerJoin('taxonomy_vocabulary', 'tv', 'ttd.vid = tv.vid'); $result = $query->condition('machine_name', 'images_cat', '=') ->condition('LOWER(ttd.name)', …
9 7  database 

2
hook_install()を使用してデータベーステーブルにデフォルト値を追加するにはどうすればよいですか?
いくつかのテーブルの独自のスキーマを持つカスタムモジュールを作成しています。モジュールが機能するためには、これらのテーブルにいくつかの値が事前に入力されている必要があります(デフォルトの場所、オプションの選択など)。 hook_install中にこれらのテーブルにデフォルト値を挿入するためのベストプラクティスの方法は何ですか? drupal_write_recordが利用できないため、db_queryを使用できますが、そうすることで基本的なルールに違反しないことを確認したいだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.