CodeIgniter に DataMapper を使用するための重要なポイントがいくつかありません。まず、かなり単純で重要なことをいくつか行う必要があります。DataMapper (DM) は、正規化された db 命名を使用して関係を見つけます。これが意味することは、データベースにクエリを実行する場合です。DM を 2 つの列に使用するのは少し難しくなりましたが、本当に必要ないと思います。
最初に DM を使用しない場合、実際には 2 つのクエリだけが必要です
SELECT u.*, m.* FROM messages AS m, users AS u WHERE m.from = u.id AND m.id = SOME_ID.
このクエリは、メッセージ ID のすべてのユーザーの詳細とメッセージの詳細を取得します。メッセージは1人のユーザーからしか送信できないと想定しているため、これはやや単純なケースです。
一方、to フィールドについては、リレーショナル テーブルを使用する必要があると仮定します。DM を使用するには、テーブルに次のような名前をusers_messages
付ける必要がありますが、本当にやり過ぎなのに、なぜ DM を使用する必要があるのでしょうか。
ここで、送信元フィールドについては、多対多の関係があります。これは、メッセージが送信先の多くのユーザーを持つことができ、ユーザーが送信した多くのメッセージを持つことができるためです。
だから、このようなテーブルを作成します
CREATE TABLE message_to (
user_id BIGINT UNSIGNED NOT NULL,
message_to_id BIGING UNSIGNED NOT NULL,
PRIMARY KEY (user_id, message_to_id),
);
正しく実行したい場合は、外部キーも使用しますが、それはDBに依存します
これで、非常に簡単にクエリを実行して、メッセージが送信されたすべてのユーザーを取得できます。
SELECT u.*, m.* FROM users AS u, m AS messages JOIN messages_to AS m_t ON (u.id = m_t.user_id)
逆にクエリを実行するのも同じくらい簡単で、ユーザーが送信したすべてのメッセージを取得できます。
DM のようなツールが存在するからといって、それが仕事に最適なツールであるとは限りません。実際にこの場合に DM を使用すると、不要なときにかなりのオーバーヘッドが発生します。
DMでこれを行うには、テーブル/列に適切な名前を付けることができないのと同じことが必要であり、他のテーブルとの関係を作成するすべてのテーブルにクラスが必要です。
つまり、DM を使用するには多くの余分な作業が必要であり、それらの構文を学ぶ必要があります。