为了账号安全,请及时绑定邮箱和手机立即绑定

laravel 数据填充,如何优化这段代码?

laravel 数据填充,如何优化这段代码?

PHP
MM们 2019-03-14 15:37:19
在数据填充时遇到问题,之前都是采用随机数据填充,使用 laravel 模型工厂以及 Faker\Generator 生成随机数据。非常方便。但是我想在程序初始化时,填入一些由我提供的数据,而非随机数据。 假设:我提供的数据为 $name。我有两张表,categories 和 navigations ,两张表存在关联关系,navigations.category_id 对应 categories.id 。我的想法如代码所示,虽然能成功写入数据,但是感觉不好,感谢大佬们提供思路。 代码如下: <?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(), ]); } } } }
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

假设你已经定义好了模型关联关系:

collect($this->name)->map(function () {$item, $category} {
    $categoryModel = Category::create($category);
    // 模型关联填充
    $categoryModel->navigations()->createMany($item);
});
查看完整回答
反对 回复 2019-03-18
  • 1 回答
  • 0 关注
  • 351 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信