在laravel 5中将一个表复制到另一个表

时间:2016-04-16 09:30:19

标签: php laravel-5 laravel-5.1 laravel-5.2

如何在laravel 5中使用以下插入查询?

INSERT INTO connection2.table (SELECT * from connection1.table);

我正在寻找两个不同的连接,Connection1.table记录应该转到Connection2.table。

5 个答案:

答案 0 :(得分:4)

$c1 = DB("Connection1")->select("SELECT * from table")

foreach($c1 as $record){

    DB("Connection2")->table("table")->insert(get_object_vars($record))

}

答案 1 :(得分:0)

@Wistar,感谢您的回复,您的代码$ record附带了一个insert类不接受的对象类, 它需要数组类型。

我使用它如下:

   DB::setFetchMode(PDO::FETCH_ASSOC);
   $table_records = DB::connection('Connection1')->select("SELECT * from table");     
   DB::setFetchMode(PDO::FETCH_CLASS); 

   DB::connection('Connection2')->table("table")->insert($table_records);

答案 2 :(得分:0)

详细说明在有大表的情况下如何对结果进行分块。当然,您也可以按自己的喜好进行块化处理,例如5000。

$chunk1 = DB("Connection1")->table("table")->orderBy("id")->chunk(5000, function($c1) {

    foreach($c1 as $record) {

        DB("Connection2")->table("table")->insert(get_object_vars($record))

    }
});

答案 3 :(得分:0)

$basket_data = DB::table('baskets')->get();
foreach($basket_data as $records)
{
    DB::table('basket_after_payments')->insert(get_object_vars($records));
}

答案 4 :(得分:0)

由于laravel 5.7+ insertUsing(array $columns, Closure|Builder|string $query)可用,
DOCS:https://laravel.com/api/5.8/Illuminate/Database/Query/Builder.html#method_insertUsing
,因此您现在可以使用Laravel链式样式进行整个查询,例如

DB::table('newTable')->insertUsing(
    ['column1', 'column2', 'column3',], // ..., columnN
    function ($query) {
        $query
            ->select(['column1', 'column2', 'column3',]) // ..., columnN
            ->from('oldTable');
            // optional: you could even add some conditions:
            // ->where('some_column', '=', 'somevalue')
            // ->whereNotNull('someColumn')
    }
);

DBapp.php 'aliases'中设置为
'DB' => Illuminate\Support\Facades\DB::class,