【Laminas】データベースからデータを扱うためのモデル(リポジトリクラス)を作る!

Laminas

どーも!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データを取得する内容を実装します。

これで、データベースとモデル(リポジトリクラス)の作成は出来ました!

次の記事で、このリポジトリクラスのファクトリーを作っていきます!

コメント

タイトルとURLをコピーしました