Laravel:点击Blade按钮实现本地数据库同步至线上数据库
本地数据库同步至线上数据库完整实现方案需求
我希望点击Blade页面中的按钮,将本地数据库同步至线上数据库,目前网上找到的方案都无效。
我已经完成的配置:
- 更新了
database.php,添加了本地(local)和服务器(server)的数据库连接凭证 - 配置了对应的
.env环境变量
以下是已有的配置代码和不完整的控制器实现:
1. database.php 配置
'local' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('LOCAL_DB_HOST', '127.0.0.1'), 'port' => env('LOCAL_DB_PORT', '3306'), 'database' => env('LOCAL_DB_DATABASE', 'forge'), 'username' => env('LOCAL_DB_USERNAME', 'forge'), 'password' => env('LOCAL_DB_PASSWORD', ''), 'unix_socket' => env('LOCAL_DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], 'server' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('SERVER_DB_HOST', '127.0.0.1'), 'port' => env('SERVER_DB_PORT', '3306'), 'database' => env('SERVER_DB_DATABASE', 'forge'), 'username' => env('SERVER_DB_USERNAME', 'forge'), 'password' => env('SERVER_DB_PASSWORD', ''), 'unix_socket' => env('SERVER_DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ],
2. .env 配置
SERVER_DB_CONNECTION=server SERVER_DB_HOST=127.0.0.1 SERVER_DB_PORT=3306 SERVER_DB_DATABASE=sync_db SERVER_DB_USERNAME=root SERVER_DB_PASSWORD= LOCAL_DB_CONNECTION=local LOCAL_DB_HOST=127.0.0.1 LOCAL_DB_PORT=3306 LOCAL_DB_DATABASE=sync_db LOCAL_DB_USERNAME=root LOCAL_DB_PASSWORD=
3. 不完整的控制器代码
// Connect to local database return $local_database = DB::connection('local-db')->table('table_name'); // Get table data from production foreach ($local_database->table('table_name')->get() as $data) { // Save data to staging database - default db connection DB::table('table_name')->insert((array) $data); // This query can do only one time for multiple time we have to do DB::table('table_name')->insertOrUpdate((array) $data); // This query also update column only, if you do some changes in //previous data it will not sync for that i dont know this query is //correct or not but it worked. DB::table('table_name')->delete((array) $data); DB::table('table_name')->insertOrIgnore((array) $data); }
现寻求完整可行的同步实现方案,要求支持点击Blade页面按钮触发,能正确处理新增、更新、删除数据的同步。
内容的提问来源于stack exchange,提问作者swapnil mane
相关产品推荐
相关产品推荐

