Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修改Yii2主从站上的记录_Yii2_Yii2 Advanced App - Fatal编程技术网

修改Yii2主从站上的记录

修改Yii2主从站上的记录,yii2,yii2-advanced-app,Yii2,Yii2 Advanced App,在我们的商业应用程序中,我们在数据库配置中使用主/从功能,并将MSSQL(业务需求)数据库作为主数据库运行,将MySQL数据库作为从数据库运行。我们希望从服务器(MySQL)读取请求,并向主机(MSSQL)写入请求。我们已经配置了一个后台作业,将数据从主服务器复制到从服务器 我尝试对主控进行更新,但失败了,因为生成的SQL使用的是MySQL语法,而不是MSSQL语法连接正在正确切换到主设备。当我在db/QueryBuilder.php文件中选中update()函数时 public functio

在我们的商业应用程序中,我们在数据库配置中使用主/从功能,并将MSSQL(业务需求)数据库作为主数据库运行,将MySQL数据库作为从数据库运行。我们希望从服务器(MySQL)读取请求,并向主机(MSSQL)写入请求。我们已经配置了一个后台作业,将数据从主服务器复制到从服务器

我尝试对主控进行更新,但失败了,因为生成的SQL使用的是MySQL语法,而不是MSSQL语法连接正在正确切换到主设备。当我在db/QueryBuilder.php文件中选中update()函数时

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