商用アプリケーションでは、データベース構成でマスタ/スレーブ機能を使用しており、マスタとしてMSSQL(ビジネス要件)dbを、スレーブとしてMySQL dbを実行しています。私たちはスレーブ(MySQL)からの読み取り要求を行い、マスタ(MSSQL)に要求を書きたいと思います。マスターからスレーブへデータをコピーするバックグラウンドジョブを設定しました。Yii2 Mater Slave Steupのレコードを変更する
マスターに更新を加えようとしましたが、生成されたSQLがMSSQL構文ではなく、MSSQL構文を持っていたため、失敗しました。 接続がマスターに正しく切り替えられています。私はデシベル/ QueryBuilder.phpファイル内の()関数で、
public function update($table, $columns, $condition, &$params)
{
if (($tableSchema = $this->db->getTableSchema($table)) !== null) {
$columnSchemas = $tableSchema->columns;
} else {
$columnSchemas = [];
}
$lines = [];
foreach ($columns as $name => $value) {
if ($value instanceof Expression) {
$lines[] = $this->db->quoteColumnName($name) . '=' . $value->expression;
foreach ($value->params as $n => $v) {
$params[$n] = $v;
}
} else {
$phName = self::PARAM_PREFIX . count($params);
$lines[] = $this->db->quoteColumnName($name) . '=' . $phName;
$params[$phName] = !is_array($value) && isset($columnSchemas[$name]) ? $columnSchemas[$name]->dbTypecast($value) : $value;
}
}
$sql = 'UPDATE ' . $this->db->quoteTableName($table) . ' SET ' . implode(', ', $lines);
$where = $this->buildWhere($condition, $params);
return $where === '' ? $sql : $sql . ' ' . $where;
}
更新をチェックすると
$this->db->quoteColumnName($name)
は常にMySQLのフォーマットを取得しているようです。 mssql/QueryBuilder.phpファイルのQueryBuilderクラスにMSSQL形式を追加する必要があります。このシナリオでスキーマがどのように選択されているか混乱しています
$this->db
この問題を解決する方法を教えてください。前もって感謝します!
サム
に接続する適切な使用高度なテンプレートchowを使用してapp/config/main.phpまたはmain-local ..もしあなたが基本的なshow config/db.phpを使用しているなら – scaisEdge