修改Yii2主从站上的记录
在我们的商业应用程序中,我们在数据库配置中使用主/从功能,并将MSSQL(业务需求)数据库作为主数据库运行,将MySQL数据库作为从数据库运行。我们希望从服务器(MySQL)读取请求,并向主机(MSSQL)写入请求。我们已经配置了一个后台作业,将数据从主服务器复制到从服务器 我尝试对主控进行更新,但失败了,因为生成的SQL使用的是MySQL语法,而不是MSSQL语法连接正在正确切换到主设备。当我在db/QueryBuilder.php文件中选中update()函数时修改Yii2主从站上的记录,yii2,yii2-advanced-app,Yii2,Yii2 Advanced App,在我们的商业应用程序中,我们在数据库配置中使用主/从功能,并将MSSQL(业务需求)数据库作为主数据库运行,将MySQL数据库作为从数据库运行。我们希望从服务器(MySQL)读取请求,并向主机(MSSQL)写入请求。我们已经配置了一个后台作业,将数据从主服务器复制到从服务器 我尝试对主控进行更新,但失败了,因为生成的SQL使用的是MySQL语法,而不是MSSQL语法连接正在正确切换到主设备。当我在db/QueryBuilder.php文件中选中update()函数时 public functio
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
请让我知道如何解决这个问题。提前谢谢
Sam似乎您正在使用单个数据库连接。。可能您需要一个duoble数据库,将每个数据库连接到适当的数据库 例如:db1用于mysql,db2用于mssql
return [
'components' => [
'db1' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=db1mysql_name',
'username' => 'db1username',
'password' => 'db1password',
],
'db2' => [
'class' => 'yii\db\Connection',
'dsn' => 'sqlsrv:Server=your.ip.address.here;Database=db2msssql_name', // change your.ip.address.here with a proper if
'username' => 'db2username',
'password' => 'db2password',
],
],
然后使用正确的连接到正确的数据库
Yii::$app->db1;
Yii::$app->db2;
似乎您正在使用单个数据库连接。。可能您需要一个duoble数据库,将每个数据库连接到适当的数据库 例如:db1用于mysql,db2用于mssql
return [
'components' => [
'db1' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=db1mysql_name',
'username' => 'db1username',
'password' => 'db1password',
],
'db2' => [
'class' => 'yii\db\Connection',
'dsn' => 'sqlsrv:Server=your.ip.address.here;Database=db2msssql_name', // change your.ip.address.here with a proper if
'username' => 'db2username',
'password' => 'db2password',
],
],
然后使用正确的连接到正确的数据库
Yii::$app->db1;
Yii::$app->db2;
如果您使用的是高级模板,请查看您的app/config/main.php或main local。。如果您使用的是basic show config/db.phpif,那么您使用的是高级模板chow您的app/config/main.php或main local。。如果您使用的是basic show config/db.php