#17 Blade foreach (intro to factories, faker and seeding)

이번 시간에는 지난번에 이어서 Blade의 사용법을 알아보겠다.

그중에서도 @foreach 문을 살펴 볼 것이다. @foreach문의 효과를 체험하기 위해선 역시나 데이터 풀이 많아야 된다.

그렇다면 100명의 유저를 생성하고 싶다고 했을 때 그것을 일일이 타이핑 할 것인가?

그런 상황에 대비해서 Faker라는 것이 있다. 일단 Factory부터 살펴보자. database/factories/ModelFactory.php의 코드를 보자.

Factory가 의미하는 바는 Factory의 의미와 일맥상통한다. 공장에서 대량의 물량을 찍어내듯 테스트정보들을 기준에 맞게 대량으로 찍어내는 공장과 같은 것을 의미한다.

$factory->define(App\User::class, function (Faker\Generator $faker) {
    static $password;

    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        //그냥 secret으로 두고 암호화를 안시킨이유는 전 시간에 이미 setter로 bcrypt를 구현해놓았기 때문이다.
        'password' => $password ?: $password = 'secret',
        'remember_token' => str_random(10),
    ];
});

위의 코드는 User model에 들어있는 요소들에 각각 넣어줄 Faker를 정의해준다.

User 모델에 뭐가 들어있는지 기억이 안난다면 다시 app/User.php를 볼것을 추천한다.

그렇다면 아까말한 100명의 가짜유저들은 어떻게 생성할까? database/seeds/DatabaseSeeder.php를 살펴보자.

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(App\User::class, 100)->create();
    }
}

정말 간단한 코드이다 factory에서 정의한 User Faker 형식대로 100개의 Faker User를 Create하는 코드이다.

자 이제 모든 준비는 끝났다.

실제로 코드를 실행하면 100명의 가짜유저들이 생기는 지 확인해보자.

터미널을 열고 다음과 같은 명령어를 친다.

artisan migrate:refresh

위의 명령어는 DB테이블을 다시 다 지우는 역할을 한다.

artisan db:seed

그 다음에 위의 명령어를 실행한다. 그렇게되면 아까 run()에 입력해두었던 코드가 실행되어 100명의 페이커가 생긴다.

페이지에서 확인해보자. 저번에 만들어두었던 views/admin/users/index.blade.php를 들어가서 코드를 다음과 같이 수정한다.

@extends('layouts.app')

@section('content')
    <div class="container">
    <div class="row">
        <div col-md-6 col-md-offset-3>
            <ul class="list-group">
                @foreach($users as $user)
                    <li class="list-group-item" style="margin-top: 20px;">{!! $user->name!!}
                    <span class="pull-right clearfix">
                        //diffForHumans는 남은시간을 사람들이 확인하기 쉬운형태로 변환해준다
                        Joined {{$user->created_at->diffForHumans()}}
                        <button class="btn btn-xs btn-primary">Follow</button>
                    </span>
                    </li>
                @endforeach
            </ul>
        </div>
    </div>
    </div>
@endsection

세부적인 코드에 대한 설명을 생략하도록 하겠다.

저렇게 코딩을 하고 localhost:8000/users에 들어가보면 100명의 사람들이 생성되어 있는 목록을 확인할 수 있다.

results matching ""

    No results matching ""