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の部分を更新する
気づきなど
- データベースについて理解しないとなとひしひしと感じた。
- モデル、コントローラ、ビューについても理解しないとなとひしひしと感じた。
- わからないことがたくさん。でもこれらを理解したら強くなれるんだと自分に言い聞かせている。