2016-12-27 9 views
3

マイDatabaseSeederはこのようなものです:データベースを使用して、あるテーブルから別のテーブルにデータをインポートする方法:シード? (ラベール5.3)?

<?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に挿入されます。まだ静的です。私は、他のテーブルから取得したmaster_lookupsテーブルにデータを挿入するダイナミックを作成したいとします(たとえばakunsテーブル)。 akunsテーブルにはフィールドID、コード、名前、code_shoppingがあります。

私はこのようにしたい:akunsテーブルから

コードデータは、テーブルmaster_lookupsのフィールドコードにakunsテーブルから

名のデータを挿入akunsテーブルからデータをcode_shoppingテーブルmaster_lookupsのフィールド名に

を挿入jsonの形式でテーブルmaster_lookupsのフィールド情報に挿入します。フィールド情報のデータ型はjsonです。

私を助けることができる人はいますか?

+0

テーブルakunsからすべてのアイテムを取得し、クロージャの本体としてターゲットテーブルに挿入するだけでループしますか? $ masterLookup-> code = $ akun-> code; $ masterLookup-> save()} 行数に応じて、Akun :: all() - > each(function($ akun)あなたはあなたのテーブルに、あなたがメモリが足りなくなるのを防ぐために、すべてではなくチャンクを使いたいかもしれません。 –

答えて

1

あなたのakunテーブルにAkunが添付されているとしましょう。 master_lookups(MasterLookup)についても同じことが仮定されています。

あなたが何か試すことができます:あなたが持っている行の数に応じて

Akun::all()->each(function($akun) { 
    $masterLookup = new MasterLookup; 
    $masterLookup->code = $akun->code; 
    $masterLookup->name = $akun->name; 
    $masterLookup->save() 
} 

を、あなたはすべての項目をつかむしようとするとメモリ不足を避けるために、代わりにallchunk方法を使用する場合があります。

+0

それぞれよりもforeachを使う方が良いでしょう –

+0

なぜですか?Laravelコレクションを利用することは良いと思います。彼らはフードの下で同じであることを確認してください。 –

関連する問題