如何使用laravel将一个表的内容传输到另一数据库表

时间:2019-11-19 14:43:06

标签: php mysql laravel

我在同一服务器上有两个数据库,我想使用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           
    }
}

3 个答案:

答案 0 :(得分:1)

假设两个表均已创建并且相同。

两种方法:  1.如果两个表都已连接到模型。用口才:

Model1::query()->chunk('1000', function($rows) {
 foreach($rows as $row) {
   Model2::create($row);
 }
});
  1. 如果它们是没有模型的表。使用查询生成器:
\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