我们可以在不截断表的情况下执行播种机,还是有什么方法可以实现这一点



我们正在做一个项目,我想使用播种器将一行插入数据库,但是当我执行该播种器时,它会截断表并插入种子记录。我想要的是它应该只插入新记录而不截断现有数据。

谁能帮忙得到这个?

这个播种机功能在几乎所有MVC中都可用,比如我们正在使用的Laravel和Yii2。

use yiidbMigration;
class m200118_113041_create_table_admin_master extends Migration
{
public function Safeup()
{
$seeder = new tebazilyii2seederSeeder();
$generator = $seeder->getGeneratorConfigurator();
$faker = $generator->getFakerConfigurator();
$seeder->table('admin_master')->columns([
'email'=>$faker->email,
'password'=>rand(1, 999999),
'created_date'=> date('Y-m-d H:i:s'),
])->rowQuantity(30);
$seeder->refill();
}
public function Safedown()
{
// $this->dropTable('{{%admin_master}}');
}
}

上面是我在 Yii2 中迁移的示例

您可以创建一个新的迁移文件并轻松地将插入查询放入其中

php artisan make:migration insert_somename_table

比内部迁移文件

<?php
use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;
use DB;
class InsertSomenameTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::('somename')->insert(array('key1' => 'value1', 'key2' => 'value2'));
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
DB::('somename')->where('key1', '=', 'value1')->delete();
}
}

并执行

php artisan migrate

您可以通过两种方式执行此操作

1.更新播种机

假设您的表名称是"类别",并且您已经有 12 个类别。

您应该从播种器数组中的 13 开始新的类别 ID。

你的播种机看起来像这样

public function run()
{
$data = array(
['id' => 13, 'category' => 'Category1', 'status' => 1],
['id' => 24, 'category' => 'category2', 'status' => 1]
);
DB::table('categories')->insert($data);
}

2.执行查询

编写一种方法并执行插入查询

相关内容

最新更新