1

現在、PHP のデータベース コードを Doctrine2 に移行することを検討しています。私たちがやりたいことのほとんどは Doctrine2 で可能だと思われます。それが可能かどうか、またそれをどのように行うべきか、私たちが確信していないことが1つだけあります。別のプロジェクトが同じデータベースを使用しているため、データベース モデルを現在変更できません。一度に 1 つのことしか変更できません。もちろん、データベース モデルを改善する方法にも関心がありますが、それは私たちの主な関心事ではありません。

問題はこのようなものです。次のような基本的な製品情報を含む製品テーブルがあります。

[product_id | code         | name          | description              | price]
 4            AS84GD         Steel brush    Strong steel brush.....     25.50
 28           HDD21N         Sand paper     Sand paper for wood.....     0.40

私たちの製品には、さまざまな追加の製品プロパティを持つさまざまなユーザーがいます。したがって、次のような product_extra_field テーブルがあります。

[extra_field_id | name]
 3                weight
 4                color
 9                supplier

最後に追加データ product_extra_field_data を含むテーブル

[product_id | extra_field_id | value]
 4            3                280
 4            4                brown
 4            9                company_x
 28           3                3
 28           4                yellow
 28           9                company_y

このデータを 1 つのオブジェクトで取得するために必要な Doctrine2 コードをどのように修正すれば、このようなオブジェクトを作成できるでしょうか?

[Product]
Id : 4
Code : AS84GD
Name : Steel brush
Description : Strong steel brush.....
Price : 25.50
Weight : 280
Color : brown
Supplier : company_x

(N)Hibernate コードを読み取ってアイデアを Doctrine2 に変換できるので、Hibernate のタグを追加しました。

4

2 に答える 2

0

これまでのところ、マップされたスーパークラスでそれを達成できるとは思いません。

ただし、Doctrine結果セットマッピング内でネイティブSQLを使用できます。

http://docs.doctrine-project.org/en/latest/reference/native-sql.html

これらは、オブジェクトとリレーショナルデータの間でマッピングする場合の欠点の1つです。つまり、データベースからリレーションシップを複製するのではなく、実際に1つのエンティティだけが必要な場合です。

于 2012-09-06T10:17:10.240 に答える
0

いくつかのクラスを作成できます: - Product - ExtraField - ExtraFieldValue

DB 構造を考慮して、次の関係があります。

次に、コレクションの最初の結果のみを取得するようにゲッター/セッターをカスタマイズする必要があります(実際に関係が1対1の場合)...

私が十分に明確かどうかわかりません。

于 2012-09-06T10:02:19.783 に答える