3

PHP では、クラスにデータベース テーブルを配置することをお勧めします。そう、

$myTable = new DbTable_Users();
$res = $myTable->doQuery();
.
.
$res->getID();
$res->getNAME();

しかし、結果セットが表示された場合、JOIN が存在する可能性があるため、フィールドが混在しています。クラスは 2 つのクラスを拡張できません。では、これをどう回避するか。

$res = Factory::doQuery ('SELECT * FROM A LEFT JOIN B ON A.ID = B.ID');
// A fields => ID, FIELD1, FIELD2
// B fields => ID, DATE, FIELD2

$res->getID();    - **now which field?? A.ID or B.ID** ??
4

2 に答える 2

1

この種のデータをどのように扱い、整理するかについての私自身の意見:

あなたのDbTable_UsersオブジェクトはオブジェクトでなければなりませんUser。これには、1 人のユーザー (おそらくデータベース内の 1 行のデータ) に関する情報が含まれている必要があります。Usersユーザー オブジェクトのコレクションに対して (複数の) オブジェクトが必要になる場合があります。ただし、array($user1, $user2, $user3)問題なく機能する場合があります。

Postユーザーによる投稿のオブジェクトがあるとします。また、ユーザーが行ったすべての投稿とそのすべての情報を取得する必要があります。通常、これは何らかの結合クエリになります。

SELECT * FROM users INNER JOIN posts ON users.id = posts.user_id WHERE users.id = 1;

内部的には、結合から返されたデータを表す単一のUserオブジェクトと複数のオブジェクトが作成されます。Post経由でこの情報にアクセスします$user->posts

于 2012-04-30T14:14:51.983 に答える
1

いわゆる複合モデル (一部のフィールドが実際に別のテーブルに関連付けられている場合) を設計するには、さまざまな方法があります。

私にとって最も明確な方法は、データベース テーブル/マッパーをあるタイプのクラスとして設計し、ドメイン モデルを別のタイプのクラスとして設計することです。後者は前者を構成要素として使用します。

于 2012-04-30T14:13:45.573 に答える