如何使用数据库将数据从一个表导入另一个表:播种? (laravel 5.3)?
Posted
技术标签:
【中文标题】如何使用数据库将数据从一个表导入另一个表:播种? (laravel 5.3)?【英文标题】:How to import data from one table to another table using Database: Seeding? (laravel 5.3)? 【发布时间】:2017-05-12 01:19:23 【问题描述】:我的 DatabaseSeeder 是这样的:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
public function run()
Model::unguard();
$this->call('MasterLookupsTableSeeder')
我的 MasterLookupsTableSeeder 是这样的:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class MasterLookupsTableSeeder extends Seeder
public function run()
DB::table('master_lookups')->insert([
'id' => '17',
'code' => '002',
'name' => 'sample data',
'information' => NULL,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s')
]);
当我运行php artisan db:seed --class=MasterLookupsTableSeeder
时,它会插入到表 master_lookups。它仍然是静态的。我想创建一个动态,将数据插入到从另一个表(例如 akuns 表)获取的 master_lookups 表中。 akuns 表有字段 id、code、name、code_shopping。
我想要这样:
akuns 表中的代码数据插入到表 master_lookups 中的字段代码
akuns 表中的名称数据插入到表 master_lookups 中的字段名称
来自akuns表的code_shopping数据以json的形式插入到master_lookups表中的字段信息中。字段信息的数据类型为json。
有没有人可以帮助我?
【问题讨论】:
只是从表 akuns 中获取所有项目并循环在目标表上插入作为闭包的主体? Akun::all()->each(function($akun) $masterLookup = new MasterLookup; $masterLookup->code = $akun->code; etc $masterLookup->save() 取决于你的行数在你的表中有你可能想要使用块而不是全部来确保你不会耗尽内存。 【参考方案1】:假设您的 akun 表附加了一个模型 Akun。 我们假设 master_lookups (MasterLookup) 也是一样的。
你可以试试这样的:
Akun::all()->each(function($akun)
$masterLookup = new MasterLookup;
$masterLookup->code = $akun->code;
$masterLookup->name = $akun->name;
$masterLookup->save()
根据您拥有的行数,您可能希望使用chunk
方法而不是all
以避免在尝试抓取所有项目时耗尽内存。
【讨论】:
似乎使用foreach比使用每个更好 为什么?我认为利用 Laravel 集合更好。我很确定它们在引擎盖下是相同的。以上是关于如何使用数据库将数据从一个表导入另一个表:播种? (laravel 5.3)?的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从一个表复制到位于不同 Redshift 实例中的另一个表?
如何使用expdp和impdp命令将一个数据库的表空间导入到另一个数据库中?(oracle 10g)