どーも!marusukeです!
前回の記事(【Laminas】ListControllerにindexActionを実装する)の続きで、データベースからデータを扱うためのモデル(リポジトリクラス)を作ります!とそのデータベースを作ります!
まず、データベースを作る!
以前のモデルを作る記事(こちら)では、ダミーデータを直接リポジトリクラス内に記述していました。
今回は、データベース(SQLite)を作成しCRUD操作できるようにします。
データベースに保存する内容は変わらず、ブログ記事のtitleとtextになります。
以下のファイルを作成します。
data/posts.schema.sql
CREATE TABLE posts (id INTEGER PRIMARY KEY AUTOINCREMENT, title varchar(100) NOT NULL, text TEXT NOT NULL);
INSERT INTO posts (title, text) VALUES ('Blog #1', 'Welcome to my first blog post');
INSERT INTO posts (title, text) VALUES ('Blog #2', 'Welcome to my second blog post');
INSERT INTO posts (title, text) VALUES ('Blog #3', 'Welcome to my third blog post');
INSERT INTO posts (title, text) VALUES ('Blog #4', 'Welcome to my fourth blog post');
INSERT INTO posts (title, text) VALUES ('Blog #5', 'Welcome to my fifth blog post');
次にterminalで、以下のコマンドでデータベースファイルを作成します。
$ sqlite data/laminastutorial.db < data/posts.schema.sql
SQLite3の場合は、
$ sqlite3 data/laminastutorial.db < data/posts.schema.sql
です。
これでデータベースは作れました!
次に、モデル(リポジトリクラス)を作る!
以前のモデルを作る記事(こちら)で、PostRepositoryInterface.phpを作りました。
このインターフェースからimplementsし、LaminasDbSqlRepository.phpというリポジトリクラスを作ります。
このリポジトリクラスで、データベースのデータを取得します。
以下のフォルダに
module/Blog/src/Model/LaminasDbSqlRepository.phpを作成します。
namespace Blog\Model;
use InvalidArgumentException;
use RuntimeException;
use Laminas\Db\Adapter\AdapterInterface;
class LaminasDbSqlRepository implements PostRepositoryInterface
{
/**
* @var AdapterInterface
*/
private $db;
/**
* @param AdapterInterface $db
*/
public function __construct(AdapterInterface $db)
{
$this->db = $db;
}
/**
* {@inheritDoc}
*/
public function findAllPosts()
{
// あとで実装します
}
/**
* {@inheritDoc}
* @throws InvalidArgumentException
* @throws RuntimeException
*/
public function findPost($id)
{
// あとで実装します
}
}
簡単に上から説明します。
名前空間(namesepace)は、Blog\Modelです。
use文で、InvalidArgumentException、RuntimeException、DBコンポーネントのAdapterInterfaceを読み込んでいます。
classは、implements PostRepositoryInterfaceで同じフォルダ内のPostRepositoryInterfaceをimplements(実装)しています。
コンストラクターには、AdapterInterfaceを注入しています。AdapterInterfaceは、データベースの接続設定を持つので、DBコンポーネントを使用してCRUD操作をするのに必要になります。
各メソッド(findAllPosts()とfindPost($id))は、後ほどSQLiteからPostデータを取得する内容を実装します。
これで、データベースとモデル(リポジトリクラス)の作成は出来ました!
次の記事で、このリポジトリクラスのファクトリーを作っていきます!
コメント