同様の探求はここにある:Help with db query in drupal - if exists update else insert唯一つの機能を有するDrupalの挿入または更新DBレコード
しかしdrupal_write_record()第3引数は、更新を決定または挿入することです。おそらく、drupalには別の機能があります。自分自身がプライマリ・キーによる挿入または更新を決定していますか?それとも私は自分自身をプログラムする必要がありますか?
同様の探求はここにある:Help with db query in drupal - if exists update else insert唯一つの機能を有するDrupalの挿入または更新DBレコード
しかしdrupal_write_record()第3引数は、更新を決定または挿入することです。おそらく、drupalには別の機能があります。自分自身がプライマリ・キーによる挿入または更新を決定していますか?それとも私は自分自身をプログラムする必要がありますか?
db_merge()関数を見て、私はそれがあなたが探している機能があると思います。
既にレコードがあるかどうかわからない場合は、プログラムフローの少し前にチェックする必要があります。通常は、DBへの呼び出しで関数などを起動します。既存のレコードオブジェクトがない場合は、stdClassから新しいレコードオブジェクトを作成します。
これには2つの利点があります。まず、既存のデータを知っていることを意味します。必要に応じて使用し、盲目的に上書きしないでください。 2番目:DBに書き込むポイントに達すると、そのオブジェクトがidプロパティを持っているかどうかに基づいてINSERTかUPDATEかを知ることができます。
私は、機能を自分で実装:
function drupal_write_record2($table, $data, $primaryKeys) {
$data = (array)$data;
$query = db_select($table)
->fields($table);
if (is_array($primaryKeys))
foreach ($primaryKeys as $key)
$query->condition($key, $data[$key]);
else
$query->condition($primaryKeys, $data[$primaryKeys]);
$update = (bool)$query->execute()->fetchAssoc();
if ($update)
return drupal_write_record($table, $data, $primaryKeys);
else
return drupal_write_record($table, $data);
}
私はすべての時間を2つの主キー(誰が自動インクリメントされていない)でレコードを生成するので、私はDB内でテストせずに記録を確認することができません。私は最も簡単な方法は、最初にレコードを削除して挿入しようとしていると思います。しかし、私はテーブルオーバーヘッドを恐れています... – neworld
複合キーを意味しますか?これは、私が概説した方法に違いはありません。 WHERE句のフィールドの組み合わせをSELECT *し、戻ってくるものを見てください。テーブルに、キーに使用しているフィールドとは別のフィールドがありますか(つまり、これは多対多の結合テーブルですか)。 –
私は単純なクエリを持っています。だから私は普遍的な機能を自分で書いています。 – neworld