12/08/2018, 17:52

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é             </div>
            
            <div class=

0