我在同一服务器上有两个数据库,我想使用laravel框架将一个表(帖子)的内容传输到另一数据库表(buss_posts)。
我更新了问题
这是我在第一个数据库上的帖子表
Schema::create('posts', function (Blueprint $table) {
$table->bigIncrements('id');
$table->text('post_name');
$table->text('post_content');
$table->timestamp();
});
这是我在第二个数据库上的buss_post表
Schema::create('buss_posts', function (Blueprint $table) {
$table->bigIncrements('id');
$table->text('post_name');
$table->text('post_content');
$table->timestamp();
});
这是我的控制器BlogController
class BlogController extends Controller
{
public function run()
{
// how can I change between two tables at the different database
// as you know I am connecting with one database
}
}
答案 0 :(得分:1)
假设两个表均已创建并且相同。
两种方法: 1.如果两个表都已连接到模型。用口才:
Model1::query()->chunk('1000', function($rows) {
foreach($rows as $row) {
Model2::create($row);
}
});
\DB::table('table1')->chunk('1000', function($rows) {
foreach($rows as $row) {
\DB::table('table2')->insert($row);
}
});
根据行数可能需要一段时间才能完成。但这不会使大块的系统角色崩溃。您可能希望将代码放在Seeder类的run
方法中。
答案 1 :(得分:0)
我遇到一个为我解决的人
我应该移至config/database
,然后写下这两个连接:
'mysql' => [
'driver' => 'mysql_1',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'your_first_database'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('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'),
]) : [],
],
然后在添加第二个数据库中:
'mysql' => [
'driver' => 'mysql_2',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'your_second_database'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('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'),
]) : [],
],
然后,在我的情况下,您应该创建两个模型,并像这样输入每个连接名称:
Class BussPost extends model
{
protected $connection = "mysql_1";
protected $table = "buss_post";
}
另一个数据库中的另一个模型:
Class Post extends model
{
protected $connection = "mysql_2";
protected $table = "posts";
}
,然后在您的控制器中,应该执行以下操作:
class BlogController extends Controller
{
public function run()
{
$posts = Post::all();
$buss_posts = BussPost::all();
return [
$posts,
$buss_posts
];
}
}
并更新您的.env文件
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db2
DB_USERNAME=root
DB_PASSWORD=
DB_CONNECTION=mysql2
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db1
DB_USERNAME=root
DB_PASSWORD=
仅此而已,我想办法是,如果某天有需要的人应该使用它
答案 2 :(得分:0)
您可以使用幼虫种子。您可以使用第三方应用程序[iseeder]生成表的内容:https://github.com/orangehill/iseed
然后您可以运行php artisan db:seed --class = Buss_PostTableSeeder