miyupaca log

2020-08-21 yps学習記録その5

2020/08/21

今回は今までよりかなり参考にならない学習記録となります。
苦しんで学習していたんだなという目でご覧ください。
自分の理解が進んだら更新したいですができるかは未定です。。。
後追いで学習する方はTwitterのログ本家で手順を追うことを強く勧めます。


やったこと

  • mysqldump
  • テーブル定義変更
  • モデルクラス作成
  • コントローラークラス作成
  • ビュー(Blade)作成
  • そのほかいろいろ

今回のお品書き


task5の前に

task4でWP作成をやって続きでこのタスクに入る人は、以下の設定に戻す&再起動する作業が入ります。

sudo vi /etc/nginx/conf.d/default.conf

// 中身に以下の変更を加えて保存
================================
(変更前)root /var/www/html/wwpp;
(変更後)root /var/www/html/yps/public;
================================

sudo systemctl restart php-fpm
sudo systemctl restart nginx

mysqldump

前に取得していたworldcup2014dbを利用する
テーブル構成を変更するのでDDLをmysqldumpで取得する

$ pwd // /var/www/html/ypsにいることを確認
$ mkdir resources/sql/
$ mysqldump -u root -p -d worldcup2014db > resources/sql/worldcup2014db.sql

mysqldumpってなんぞと思ったらデータベースのバックアップのことらしい。 構成をいじるためのデータをファイルに保存する作業。
使い方は以下。

$ mysqldump -u ユーザ名 -p データベース名 > 出力するファイル名

dumpをつくったらテーブルがあるか確認。

$ grep -i 'create table' resources/sql/worldcup2014db.sql
// 以下が表示されればok
CREATE TABLE `countries` (
CREATE TABLE `goals` (
CREATE TABLE `goals_tmp` (
CREATE TABLE `pairings` (
CREATE TABLE `pairings_tmp` (
CREATE TABLE `players` (
CREATE TABLE `players_tmp` (

テーブル定義変更

無事dumpできたところでデータベースの定義変更。
テーブルにフィールドの追加を行う。さっき作ったファイルをviで開く。

sudo cp resources/sql/worldcup2014db.sql resources/sql/worldcup2014db.sql.org //元ファイル作っておく
vi resources/sql/worldcup2014db.sql

ファイルを開いたら countri,esgoals,pairings,playersのテーブルに、以下のフィールドをPRIMARY KEY (`id`)直前に追加する。

`expired_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`deleted_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,

あと、AUTO_INCREMENT=数字の削除もしておく。

mysql cliにログインして前のDB削除、今作ったDBを読み込む。

mysql -u root -p 

mysql> drop database worldcup2014db; // 前のDB削除
// Query OK, 7 rows affected (0.20 sec)

create database worldcup2014db; // 再作成
use worldcup2014db; // 選択
source resources/sql/worldcup2014db.sql; // データベース流し込み
show tables; // テーブルができているか確認
+--------------------------+
| Tables_in_worldcup2014db |
+--------------------------+
| countries                |
| goals                    |
| goals_tmp                |
| pairings                 |
| pairings_tmp             |
| players                  |
| players_tmp              |
+--------------------------+
7 rows in set (0.00 sec)

データベースに流し込むためのデータを持ってくる。(task3と同じ手順)

cd /tmp
sudo yum install wget unzip -y
wget http://tech.pjin.jp/wp-content/uploads/2016/04/worldcup2014.zip
unzip worldcup2014.zip
ls -la worldcup2014.sql

さっきテーブル構成を変えたデータベースにこのデータを流し込むために テーブル構成が記述してある部分を削除する。

grep -i 'create table' /tmp/worldcup2014.sql
CREATE TABLE `countries` (
CREATE TABLE `goals` (
CREATE TABLE `goals_tmp` (
CREATE TABLE `pairings` (
CREATE TABLE `pairings_tmp` (
CREATE TABLE `players` (
CREATE TABLE `players_tmp` (

↑これらをまるっと削除する。

vi worldcup2014.sql

更新し終わったらmysql cliにまた入り、/tmp/worldcup2014.sqlのデータだけ流し込み。

cd - 
mysql -u root -p -D worldcup2014db

source /tmp/worldcup2014.sql;

流し込めたらexitで抜ける。


モデルクラス作成

前に作ったモデルを削除して、新しく4つモデルを作る。

rm app/Models/Player.php

php artisan make:model Models/Country -m
php artisan make:model Models/Goal -m
php artisan make:model Models/Pairing -m
php artisan make:model Models/Player -m

テーブル名が複数形、modelクラス名を単数形にしておけば勝手に紐付消されるが、 念のために明示的にテーブル名とdatesの指定しておく。

vi app/Models/Player.php

// 以下をファイルの中の「//」の下に記述
protected $table = "players";
protected $dates = ["expired_at", "deleted_at", "updated_at", "created_at"];

他の三つのモデルについても同じ作業をする。テーブル名はそれぞれの複数形になるので注意。


コントローラークラス作成

php artisan make:controller CountryController --resource --model=Models/Country
php artisan make:controller GoalController --resource --model=Models/Goal
php artisan make:controller PairingController --resource --model=Models/Pairing
php artisan make:controller PlayerController --resource --model=Models/Player

php artisan make:controller WelcomeController --resource

ビュー(Blade)作成

vi resources/views/welcome.blade.php

中身をこちらに書き換える。

vi routes/web.php

中身をこちらに書き換える。

php artisan cache:clear && php artisan config:clear && php artisan route:clear && php artisan view:clear
composer clear-cache && composer dump-autoload --optimize
sudo chown -R centos:nginx /var/www/html/yps

そのほかいろいろ

上記の工程までやった段階でブラウザでアクセスしてもエラーになる。
オンタイムではここから自力で画面を正しく表示できるところまでやることに。
テーブルにさらにフィールド追加したりページネーションの設定したり。。。

以下が出されたヒント
①テーブルビューを1つ追加
②functionを1つ追加
③controllerからviewに変数渡し
先生のリポジトリ
ゴールの画面

ページ表示するところまで行ったが、先生のリポジトリをカンニングしながら差分を埋めていったので理解しながら勧められていない。
学習ログなのでやったことを覚えている範囲で箇条書きでメモしておく。

  • sudo chmod -R 777 storage/ bootstrap/cache/ (これはいらないらしい。。)
  • dumpファイルにtotal_goalsフィールド追加する
  • worldcup2014dbをtotal_goalsも含ませるために新しく作り直す、データもまた流し込む
  • TotalGoalモデルを追加する
  • TotalGoalControllerコントローラを追加する
  • Playerモデルにfunction(getWithContoryByPaginate)を追加する
  • 先に作っていたコントローラのuseの部分を更新する

気づきなど

  • データベースについて理解しないとなとひしひしと感じた。
  • モデル、コントローラ、ビューについても理解しないとなとひしひしと感じた。
  • わからないことがたくさん。でもこれらを理解したら強くなれるんだと自分に言い聞かせている。

miyupacaの学習記録ブログです。