Sử dụng Fractal - Transformer trong Laravel
Khởi tạo project composer create-project --prefer-dist laravel/laravel laravel_transformer Tạo database và migration Ở đây mình tạo database là laravel_transformer Tiếp theo, tạo migration: php artisan make:migration create_post_table php artisan make:migration update_table_users --table ...
Khởi tạo project
composer create-project --prefer-dist laravel/laravel laravel_transformer
Tạo database và migration
Ở đây mình tạo database là laravel_transformer
Tiếp theo, tạo migration:
php artisan make:migration create_post_table php artisan make:migration update_table_users --table="users"
Mình sẽ tạo thêm 1 bảng posts và update thêm 1 số trường của bảng users. Migration của mình như sau:
public function up() { Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->unsignedInteger('user_id'); $table->string('content'); $table->unsignedInteger('votes'); $table->unsignedInteger('view_count'); $table->timestamps(); }); }
và bảng users
Schema::table('users', function (Blueprint $table) { $table->string('address'); $table->unsignedInteger('age'); $table->string('phone'); });
Bạn chạy php artisan migrate để cập nhật trong database nhé.
Tạo Relationship
Trước hết bạn tạo Post model:
php artisan make:model Post
và thêm relation cho bảng này:
public function user() { return $this->belongsTo(User::class); }
Relation của bảng users:
public function posts() { return $this->hasMany(Post::class); }
Tạo seeder
Xong rồi bạn có thể thêm trực tiếp vào database bằng tay. Hoặc sẽ tạo bản ghi bằng factory như sau: Tạo file ModelFactory trong thư mục factories:
<?php $factory->define(AppUser::class, function (FakerGenerator $faker) { static $password; return [ 'name' => $faker->name, 'email' => $faker->unique()->email, 'password' => $password ?: $password = bcrypt('secret'), 'address' => $faker->address, 'age' => 23, 'phone' => '01698675733' ]; }); $factory->define(AppPost::class, function (FakerGenerator $faker) { return [ 'user_id' => function () { return AppUser::pluck('id') ->random(1) ->first(); }, 'content' => $faker->text(30), 'votes' => 100, 'view_count' => 100, ]; });
Tiếp theo chúng ta chạy lệnh php artisan make:seeder UsersTableSeeder và php artisan make:seeder PostsTableSeed để tạo ra 2 file chứa thông tin về các số lượng bản ghi mà chúng ta muốn tạo.
PostsTableSeeder:
<?php use IlluminateDatabaseSeeder; class PostsTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { factory(AppPost::class, 10)->create(); } }
UsersTableSeeder
<?php use IlluminateDatabaseSeeder; class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { factory(AppUser::class, 3)->create(); } }
Trong file DatabaseSeeder ta sẽ làm như sau:
<?php use IlluminateDatabaseSeeder; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $this->call([ UsersTableSeeder::class, PostsTableSeeder::class ]); } }
Cuối cùng ta chạy :
php artisan db:seed
Đơn giản phải không nào!. Thế là có dữ liệu để test rồi nhé