Laravel框架数据迁移和填充
来源:互联网 发布:其他国家的顶级域名 编辑:程序博客网 时间:2024/06/06 02:02
一、数据迁移
1、使用 Artisan 命令make:migration来创建一个新的迁移:
php artisan make:migration create_users_table// 可以使用 --path指定生成的目标路径php artisan make:migration --path=app\providers create_users_table// 还可以一次性创建Model和migration// 下述命令会做两件事情:// 在 app 目录下创建模型类 App\Post// 创建用于创建 posts 表的迁移,该迁移文件位于 database/migrations 目录下。php artisan make:model --migration Post
执行成功后会在database\migrations目录下生成如下格式的php文件
2016_05_05_060000_create_users_table.php
<?phpuse Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration;class CreateUsersTable extends Migration{ /** * Run the migrations. * * @return void */ public function up() { // 创建表 Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('users'); }}
迁移的顺序跟生成迁移文件的时间有关系。如果要修改表结构,比如说添加某个字段,需要在创建表之后执行,
比如说为users表添加软删除(也就是添加deleted_at字段)
php artisan make:migration update_users_table
在生成的php文件中添加如下代码
<?phpuse Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration;class UpdateUsersTable extends Migration{ /** * Run the migrations. * * @return void */ public function up() { Schema::table('users', function(Blueprint $table){ // 软删除 $table->softDeletes(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('users', function(){ $table->dropSoftDeletes(); }); }}
二、数据填充
要生成一个填充器,可以通过 Artisan 命令make:seeder。所有框架生成的填充器都位于database/seeders目录:
php artisan make:seeder UsersTableSeeder
在生成的UsersTableSeeder.php中
<?phpuse Illuminate\Database\Seeder;class UserTableSeeder extends Seeder{ /** * 运行数据库填充 * * @return void */ public function run() { DB::table('users')->insert([ 'name' => str_random(10), 'email' => str_random(10).'@gmail.com', 'password' => bcrypt('secret'), ]); }}
在DatabaseSeeder类中,你可以使用call方法执行额外的填充类,
<?phpuse Illuminate\Database\Seeder;use Illuminate\Database\Eloquent\Model;class DatabaseSeeder extends Seeder{ /** * Run the database seeds. * * @return void */ public function run() { // 取消批量插入限制 Model::unguard(); $this->call(UsersTableSeeder::class); }}
最后执行
php artisan db:seed// 指定某个表的类名// 指定类名后不需要在DatabaseSeeder.php中添加call方法php artisan db:seed --class=UsersTableSeeder
3、通过factory模型仓库填充
在DatabaseSeeder类中,run方法中使用call方法执行相应的填充类
<?phpuse Illuminate\Database\Seeder;class DatabaseSeeder extends Seeder{ /** * Run the database seeds. * * @return void */ public function run() { $this->call(UsersTableSeeder::class); $this->call(TagsTableSeeder::class); $this->call(PostsTableSeeder::class); }}
在database\factories\ModelFactory.php中定义仓库模型
<?php$factory->define(App\User::class, function (Faker\Generator $faker) { return [ 'name' => $faker->name, 'email' => $faker->safeEmail, 'password' => bcrypt(str_random(10)), 'remember_token' => str_random(10), ];});$factory->define(App\Post::class, function($faker) { $images = ['about-bg.jpg', 'contact-bg.jpg', 'home-bg.jpg', 'post-bg.jpg']; $title = $faker->sentence(mt_rand(3, 10)); return [ 'title' => $title, 'subtitle' => str_limit($faker->sentence(mt_rand(10, 20)), 252), 'page_image' => $images[mt_rand(0, 3)], 'content_raw' => join("\n\n", $faker->paragraphs(mt_rand(3, 6))), 'publish_at' => $faker->dateTimeBetween('-1 month', '+3 days'), 'meta_description' => "Meta for $title", 'is_draft' => false, ];});$factory->define(App\Tag::class, function($faker) { $images = ['about-bg.jpg', 'contact-bg.jpg', 'home-bg.jpg', 'post-bg.jpg']; $word = $faker->word; return [ 'tag' => $word, 'title' => ucfirst($word), 'subtitle' => $faker->sentence, 'page_image' => $images[mt_rand(0, 3)], 'meta_description' => "Meta for $word", 'reverse_direction' => false, ];});
生成model
// 以Post举例php artisan make:model Post
生成填充类
php artisan make:seeder PostsTableSeeder
在PostsTableSeeder.php中调用
<?phpuse App\Post;use App\Tag;use Illuminate\Database\Seeder;class PostsTableSeeder extends Seeder{ /** * Run the database seeds. * * @return void */ public function run() { Post::truncate(); $tags = Tag::lists('tag')->all(); DB::table('post_tag_pivot')->truncate(); factory(Post::class, 20)->create()->each(function($post) use($tags) { if (mt_rand(1, 100) <= 30) { return; } shuffle($tags); $postTags = [$tags[0]]; if (mt_rand(1, 100) <= 30) { $postTags[] = $tags[1]; } $post->syncTags($postTags); }); }}
<?phpuse App\Tag;use Illuminate\Database\Seeder;class TagsTableSeeder extends Seeder{ /** * Run the database seeds. * * @return void */ public function run() { Tag::truncate(); factory(Tag::class, 5)->create(); }}
如果想在执行填充入库前对数据模型中的某个属性进行相关的操作,可以在相应的模型中定义set(字段)Attribute方法
比如说对posts表中的字段content_raw进行操作,同时还可以在该方法中操作其他字段,如content_html字段
public function setContentRawAttribute($value) { $markdown = new Markdowner(); $this->attributes['content_raw'] = $value; $this->attributes['content_html'] = $markdown->toHTML($value); }
0 0
- Laravel框架数据迁移和填充
- Laravel框架数据迁移和填充
- laravel数据迁移和填充
- laravel框架总结 -- 数据迁移和数据填充
- laravel框架数据迁移、填充(简单示例)--学习笔记
- laravel 数据迁移与填充的应用总结
- Laravel 实践之路: 数据库迁移与数据填充
- Laravel数据库迁移和填充(支持中文)
- [李景山php]每天laravel[034]-laravel 基础知识 --- 数据迁移及填充
- laravel (四) laravel 数据填充
- Laravel数据快速填充
- laravel 数据填充
- 基于laravel框架的antvel 在迁移数据数据出错
- laravel数据迁移
- laravel数据迁移
- Laravel 5.2 教程 - 数据填充
- laravel使用faker填充数据
- laraver 用户认证auth、数据迁移和填充
- 解决Cordova开发的iOS的app界面被状态栏覆盖
- 工作流概念
- 游戏基本元素1
- Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
- php命名空间
- Laravel框架数据迁移和填充
- ContentProvider监听数据变化
- 对象指针
- 游戏基本元素2
- the method of type must override a superclass.
- 搜索框制作--AutoCompleteTextView
- matlab diag 函数
- HBase 1.1.3 中如何开发LoadBalance插件
- 动作