【Laravel】大量のダミーデータ作成/ページネーション

factoryの中でfackerを使用し、大量のダミーデータが作成できる。


公式アニュアル

https://readouble.com/laravel/9.x/ja/eloquent-factories.html

# Factoryファイル作成

```
php artisan make:factory ContactFormFactory
```
ファイルが自動生成される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/f0f1435a-4fca-3e43-136c-63b77cb3a323.png)

# ダミーデータの日本語設定

```php:config/app.pnp
// 変更前
'faker_locale' => 'en_US',

//変更後
'faker_locale' => 'ja_JP',
```

# 実装
参考記事

https://qiita.com/tosite0345/items/1d47961947a6770053af

```php5:database/factories/ContactFormFactory.php
class ContactFormFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition()
    {
        return [
            //追記(古い)
            'name' => $this->faker->name(20),
            'title' => $this->faker->realText(50),
            'email' => $this->faker->email(),
            'url' => $this->faker->url(),
            'gender' => $this->faker->boolean(),
            'age' => $this->faker->numberBetween(1, 6),
            'contact' => $this->faker->realText(200),
            
        ];
    }
}

```

```php5:database/seeders/DatabaseSeeder.php

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        //　欲しい件数(100)
        \App\Models\ContactForm::factory(100)->create();
    }
}

```
```
php artisan migrate:fresh --seed
```
欲しいデータ100件が自動生成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/113bdd32-6da7-beb1-d80a-ca9808988b67.png)

# ページネーション
ページ毎にデータ〇件と表示指定できる

```php5:Http/Controllers/ContactFormController.php
public function index()
{
        // 追記 表示したい件数(30)
        $contacts = ContactForm::select('id', 'name', 'title', 'created_at')
        ->paginate(30);
}}
```
表示するファイル
```php5:resources/views/contacts/index.blade.php
{{ $contacts->links() }}
```
ページ毎に表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/2137a285-08de-edb8-0ff1-3f7184dd0ecc.png)

↓ここを日本語対応
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/686f10ce-fdc8-95a8-1ddb-f860107741fd.png)

公式マニュアル

https://readouble.com/laravel/9.x/ja/pagination.html

```
php artisan vendor:publish --tag=laravel-pagination
```

resources/views/venderが自動生成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/4b2ae9cd-11a8-2335-5282-cef8de5005fe.png)

```php5:resources/views/vender/tailwind.blade.php
// 変更前
<div class="hidden sm:flex-1 sm:flex sm:items-center sm:justify-between">
    <div>
        <p class="text-sm text-gray-700 leading-5">
            {!! __('Showing') !!}
            @if ($paginator->firstItem())
                <span class="font-medium">{{ $paginator->firstItem() }}</span>
                {!! __('to') !!}
                <span class="font-medium">{{ $paginator->lastItem() }}</span>
            @else
                {{ $paginator->count() }}
            @endif
            {!! __('of') !!}
            <span class="font-medium">{{ $paginator->total() }}</span>
            {!! __('results') !!}
        </p>
    </div>

// 変更後
<div class="hidden sm:flex-1 sm:flex sm:items-center sm:justify-between">
    <div>
        <p class="text-sm text-gray-700 leading-5">
            <span class="font-medium">{{ $paginator->total() }}</span>
            件中
            @if ($paginator->firstItem())
                <span class="font-medium">{{ $paginator->firstItem() }}</span>
                ～
                <span class="font-medium">{{ $paginator->lastItem() }}</span>
            @else
                {{ $paginator->count() }}
            @endif
            件表示
        </p>
    </div>
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/2e325002-e34f-c6a7-77f5-7c8ed10642b4.png)