【Laravel】PostgreSQLとの接続 ＋ DBへダミーデータをセットする


## Laravelのインストール
- composerがインストールされているか確認

```terminal:ターミナル
composer --version
```
<br>


- Laravelプロジェクトの作成

```
composer create-project --prefer-dist laravel/laravel larapg
```
<br>


- cdコマンドで作成したプロジェクトのフォルダ内へ移動。

```
cd larapg
```
<br>


- 設定

```php:config/app.php
// 70行目
'timezone' => 'Asia/Tokyo',

// 109行目
'faker_locale' => 'ja_JP',
```
<br>





## PostgreSQLのインストール
- homebrewがインストールされてるか確認

```
brew -v
```
<br>

- pgsqlのインストール

```
brew install postgres
```
<br>


- 文字コード設定

```
initdb /usr/local/var/postgres -E utf8
```
<br>



## PostgreSQLへ接続

- pgsqlを起動

```
postgres -D /usr/local/var/postgres
```

- 上記コマンドを起動したまま、別のターミナルを開く。
<br>


- pgsqlに接続

```
psql postgres
```
<br>


- ユーザーを作る

```
createuser -P admin
```
<br>

- ユーザー一覧で確認

```
psql -q -c'select * from pg_user' postgres
```
<br>



## PostgreSQLでDB生成

- DB [friends] を作る

```
createdb friends
```
<br>

- DB一覧で確認

```
\l
```
<br>



- [Postico](https://eggerapps.at/postico/) をインストール
- 起動して下の画像のように設定して、Connectをクリック。<br>
![スクリーンショット 2020-08-18 18.06.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146045/73c676cc-f646-3174-8989-a9f21dbb16e0.png)


<br>


* 下の画像のようにDBが作られているか確認します。<br>
![スクリーンショット 2020-08-18 15.57.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146045/7f332921-bb0f-1a9f-781a-39185245ae7f.png)

<br>


## マイグレーションを設定
```
php artisan make:model Models/Friend -m
```
* マイグレーション(`database/migrations/create_friends_table`)を、モデル(`app/Models/Friend.php`)と一緒に作成します。


<br>

```php:create_friends_table.php
Schema::create('friends', function (Blueprint $table) {
    $table->bigIncrements('id'); // ID
    $table->string('name', 30); // 名前。30文字以内。
    $table->Integer('age')->nullable(); // 年齢。NULLでもOK。
    $table->timestamps();
});
```
* 各テーブルのスキーマを上記のように編集します。
* [カラム コマンド・修飾子一覧](https://readouble.com/laravel/7.x/ja/migrations.html#contentContainer:~:text=%E4%BD%BF%E7%94%A8%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%AB%E3%83%A9%E3%83%A0%E3%82%BF%E3%82%A4%E3%83%97)


<br>


## PostgreSQLとLaravelを接続
```.env:.env（隠しファイル）
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=friends
DB_USERNAME=admin
DB_PASSWORD=
```
* Laravelの隠しファイルである .envファイルを上記のように変更。
<br>

```
php artisan migration
```
* 上記コマンドで、マイグレーションの実行します。
* ***Postico***を更新して、マイグレーションが通ったか確認します。
* 下の画像のように、DBの中で friendsテーブルが生成されているか確認してください。<br>
![スクリーンショット 2020-08-18 16.25.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146045/8621c9a6-3939-1522-bb8d-fe82ad7b8891.png)



<br>

* マイグレーションを修正したい場合は、下記コマンドを実行して、もう一度`php artisan migrate`を実行する。
```
php artisan migration:rollback
```
<br>




## ダミーデータの設定
- カラムに、自動でデフォルト値を設定してくれる***Factory***を使用します。

```factoryの生成
php artisan make:factory FriendFactory
```
<br>


```php:database/factories/FriendFactory.php
use App\Models\Friend; // Friend のクラスを呼び出す
~
$factory->define(Friend::class, function (Faker $faker) {
    return [
        'name' => $faker->name, // 名前
        'age' => $faker->numberBetween(18,60) // 年齢、18歳〜60歳
    ];
});
```
- 他にも```->firstName```や```->city```、```->date```などがあります。
- [faker一覧](https://laraweb.net/knowledge/2316/#post-2316:~:text=%E8%A8%98%E8%BF%B0,-%E5%87%BA%E5%8A%9B%E7%B5%90%E6%9E%9C)
<br>



```seederの生成
php artisan make:seeder FriendsTableSeeder
```
<br>



```php:database/seeds/FriendsTableSeeder.php
use App\Models\Friend; // Friend のクラスを呼び出す
~
public function run()
{
    factory(Friend::class, 15)->create(); // friendモデルを使って、15個のランダムデータをDBに保存する。
}
```
<br>



```php:database/seeds/DatabaseSeeder.php
public function run()
{
    $this->call(FriendsTableSeeder::class);
}
```
<br>



## ダミーデータをDBへインサート
```
composer dump-autoload
```
<br>



```
php artisan migrate:fresh --seed
```
<br>

- Posticoを確認して、下の画像の様になっていたら成功です。<br>

![スクリーンショット 2020-08-18 15.47.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146045/526fd370-3512-faee-8ec6-5147a8765ae1.png)