鍍金池/ 問答/PHP/ laravel 數(shù)據(jù)填充,如何優(yōu)化這段代碼?

laravel 數(shù)據(jù)填充,如何優(yōu)化這段代碼?

在數(shù)據(jù)填充時(shí)遇到問題,之前都是采用隨機(jī)數(shù)據(jù)填充,使用 laravel 模型工廠以及 Faker\Generator 生成隨機(jī)數(shù)據(jù)。非常方便。但是我想在程序初始化時(shí),填入一些由我提供的數(shù)據(jù),而非隨機(jī)數(shù)據(jù)。

假設(shè):我提供的數(shù)據(jù)為 $name。我有兩張表,categoriesnavigations ,兩張表存在關(guān)聯(lián)關(guān)系,navigations.category_id 對(duì)應(yīng) categories.id 。我的想法如代碼所示,雖然能成功寫入數(shù)據(jù),但是感覺不好,感謝大佬們提供思路。

代碼如下:

<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class CategoryTableSeeder extends Seeder
{
    protected $name = [
        'php'      => [
            [
                'name'     => 'php1',
                'describe' => 'php1',
                'icon'     => 'php1'
            ], [
                'name'     => 'php1',
                'describe' => 'php1',
                'icon'     => 'php1'
            ], [
                'name'     => 'php1',
                'describe' => 'php1',
                'icon'     => 'php1'
            ],
        ], 'mysql' => [
            [
                'name'     => 'mysql1',
                'describe' => 'mysql1',
                'icon'     => 'mysql1'
            ], [
                'name'     => 'mysql1',
                'describe' => 'mysql1',
                'icon'     => 'mysql1'
            ], [
                'name'     => 'mysql1',
                'describe' => 'mysql1',
                'icon'     => 'mysql1'
            ],
        ], 'vue'   => [
            [
                'name'     => 'vue1',
                'describe' => 'vue1',
                'icon'     => 'vue1'
            ], [
                'name'     => 'vue1',
                'describe' => 'vue1',
                'icon'     => 'vue1'
            ], [
                'name'     => 'vue1',
                'describe' => 'vue1',
                'icon'     => 'vue1'
            ], [
                'name'     => 'vue1',
                'describe' => 'vue1',
                'icon'     => 'vue1'
            ], [
                'name'     => 'vue1',
                'describe' => 'vue1',
                'icon'     => 'vue1'
            ],
        ],
    ];

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run ()
    {
        foreach ($this->name as $key => $value) {
            $id = DB::table('categories')->insertGetId([
                'name'       => $key,
                'type'       => '1',
                'created_at' => \Carbon\Carbon::now()->toDateTimeString(),
                'updated_at' => \Carbon\Carbon::now()->toDateTimeString(),
            ]);
            foreach ($value as $k => $v) {
                DB::table('navigations')->insert([
                    'category_id' => $id,
                    'name'        => $v['name'],
                    'describe'    => $v['describe'],
                    'icon'        => $v['icon'],
                    'created_at'  => \Carbon\Carbon::now()->toDateTimeString(),
                    'updated_at'  => \Carbon\Carbon::now()->toDateTimeString(),
                ]);
            }
        }

    }
}
回答
編輯回答
病癮

假設(shè)你已經(jīng)定義好了模型關(guān)聯(lián)關(guān)系:

collect($this->name)->map(function () {$item, $category} {
    $categoryModel = Category::create($category);
    // 模型關(guān)聯(lián)填充
    $categoryModel->navigations()->createMany($item);
});
2018年5月7日 07:25