このチャプターの目次
Chapter5
PHPとMySQLを使ったアプリケーションの連携の実装を行います。
困ったときに見るべきサイト
データベースとは
課題1
データベースを使って掲示板アプリを書き換えてください。
なお、以前の投稿は消しても構いません。
ヒント:スキーマは以下のものを使ってもよいです。
CREATE TABLE IF NOT EXISTS `thread` (
`id` int(11) AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`content` varchar(255) NOT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`deleted_at` DATETIME DEFAULT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
PDOの使い方
課題2
データベースを使って、複数の掲示板を立てられるようにしてください。
スレッドと掲示板のタイトルが、掲示板毎に変わっていればOKです。
ヒント:今のthreadは複数の掲示板の投稿を管理できるようになっていないので、掲示板全体を管理するテーブルを作り、掲示板と投稿を紐付けるカラムをthreadに追加してください。
よりシステム的にDBを管理する
現状の問題点
- アイパスが丸わかり
- スキーマが共有されていない
課題1が終わったら、composerをダウンロードして、 composer.json
を入れ替える。
composer.json
{
"name": "career2-php/career2-php-sample1",
"require": {
"davedevelopment/phpmig": "^1.6",
"vlucas/phpdotenv": "^5.0",
"pimple/pimple": "^3.0"
},
"require-dev": {
"squizlabs/php_codesniffer": "^3.5"
},
"scripts": {
"sniffer": [
"./vendor/bin/phpcs --standard=phpcs.xml ./"
],
"sniffer-rewrite": [
"./vendor/bin/phpcbf --standard=phpcs.xml ./"
]
}
}
composer.json
を更新したら composer install
を実行してください。(動画参照)
ここまで7/15までの課題
vendor/bin/phpmig init
vendor/bin/phpmig generate CreateThread
<?php
use Phpmig\Migration\Migration;
class CreateThread extends Migration
{
/**
* Do the migration
*/
public function up()
{
$sql = <<<EOT
CREATE TABLE IF NOT EXISTS `thread` (
`id` int(11) AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`content` varchar(255) NOT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`deleted_at` DATETIME DEFAULT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
EOT;
$container = $this->getContainer();
$container['db']->query($sql);
}
/**
* Undo the migration
*/
public function down()
{
$sql = "DROP TABLE `thread`;";
$container = $this->getContainer();
$container['db']->query($sql);
}
}
phpmig.php
を以下のように編集
<?php
require 'vendor/autoload.php';
use Dotenv\Dotenv;
use Phpmig\Adapter;
use Pimple\Container;
$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();
$container = new Container();
$container['db'] = function () {
$dbh = new PDO('mysql:dbname='.$_ENV['DB_NAME'].';host=127.0.0.1', $_ENV['DB_USER'], $_ENV['DB_PASSWORD']);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $dbh;
};
$container['phpmig.adapter'] = function ($c) {
return new Adapter\PDO\Sql($c['db'], 'migrations');
};
$container['phpmig.migrations_path'] = __DIR__ . DIRECTORY_SEPARATOR . 'migrations';
return $container;
.env
を作成し、環境変数を以下のように設定する。
DB_USER="root"
DB_NAME="thread"
DB_PASSWORD="password"
vendor/bin/phpmig migrate