slim:プロジェクト応用(二)データベース
19026 ワード
プロジェクト応用(二)データベース
データベースはdoctrine ormを使用し、doctrineの依存には後で使用するsymfony/consoleコンポーネントが含まれています. doctrine orm をインストール新規cli構成 新規bootstrap 新規実行可能ファイル 新規entity を使用
参考src/controller/TestDoctrine.php
まずdoctrine ormの使用チュートリアルを理解することをお勧めします PS
code
データベースはdoctrine ormを使用し、doctrineの依存には後で使用するsymfony/consoleコンポーネントが含まれています.
composer require doctrine/orm
# config/cli-config.php
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Tools\Console\ConsoleRunner;
use Slim\Container;
/** @var Container $container */
$container = require_once APP_ROOT . '/src/bootstrap.php';
ConsoleRunner::run(
ConsoleRunner::createHelperSet($container[EntityManager::class])
);
# src/bootstrap.php
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Cache\FilesystemCache;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Mapping\Driver\AnnotationDriver;
use Doctrine\ORM\Tools\Setup;
use Slim\Container;
require_once APP_ROOT . '/vendor/autoload.php';
(new \Symfony\Component\Dotenv\Dotenv(false))->loadEnv(APP_ROOT . "/.env.local");
$env = $_ENV['APP_ENV']??'local';
$container = new Container(require APP_ROOT . "/config/config.$env.php");
$container[EntityManager::class] = function (Container $container): EntityManager {
$config = Setup::createAnnotationMetadataConfiguration(
$container['settings']['doctrine']['metadata_dirs'],
$container['settings']['doctrine']['dev_mode']
);
$config->setMetadataDriverImpl(
new AnnotationDriver(
new AnnotationReader,
$container['settings']['doctrine']['metadata_dirs']
)
);
$config->setMetadataCacheImpl(
new FilesystemCache(
$container['settings']['doctrine']['cache_dir']
)
);
return EntityManager::create(
$container['settings']['doctrine']['connection'],
$config
);
};
return $container;
# bin/doctrine
define('APP_ROOT', dirname(__DIR__));
@include APP_ROOT . "/vendor/bin/doctrine";
#
# src/Entity/Data.php
# , vendor/doctrine/annotations, :https://github.com/doctrine/annotations
/**
* Created by PhpStorm.
* Authon: akio
* Date: 7/31/19
* Time: 11:26
*/
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Annotations\Annotation;
/**
* @author akio
* Class Data
* @package App\Entity
* CREATE TABLE `data` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`data` varchar(255) DEFAULT '',
`age` tinyint(3) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4;
* @ORM\Entity()
* @ORM\Table(name="data")
*/
class Data
{
/**
* @author akio
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @var int
*/
protected $id;
/**
* @author akio
* @ORM\Column(type="string")
* @var string
*/
protected $data;
/**
* @author akio
* @ORM\Column(type="integer")
* @var int
*/
protected $age;
/**
* @author akio
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @author akio
* @return string
*/
public function getData(): string
{
return $this->data;
}
/**
* @author akio
* @param string $data
*/
public function setData(string $data): void
{
$this->data = $data;
}
/**
* @author akio
* @return int
*/
public function getAge(): int
{
return $this->age;
}
/**
* @author akio
* @param int $age
*/
public function setAge(int $age): void
{
$this->age = $age;
}
}
参考src/controller/TestDoctrine.php
まずdoctrine ormの使用チュートリアルを理解することをお勧めします
'SQLSTATE[HY000] [2002] No such file or directory' , php.ini 'pdo_mysql.default_socket'
code