私が集めたことから、Symfony 2/Doctrineはデータベース定義(私の場合は外部キー制約)を使用してエンティティ間の関係をマップします。私は特に両側から関係ができるようにしたいという2つのテーブルを持っていますが、各テーブルに冗長な外部キーを作成したくありません。この場合、私はAccount
テーブルとTransaction
テーブルを持っています。テーブルから外部テーブルへのOneToManyマッピング[Symfony 2/Doctrine]
アカウント表
CREATE TABLE "account" (
"account_id" BIGSERIAL NOT NULL,
"name" VARCHAR (100) NOT NULL,
"date_created" TIMESTAMP (6) WITH TIME ZONE NOT NULL,
"date_modified" TIMESTAMP (6) WITH TIME ZONE,
CONSTRAINT "pk-account-account_id"
PRIMARY KEY ("account_id"),
);
トランザクション表
CREATE TABLE "transaction" (
"transaction_id" BIGSERIAL NOT NULL,
"account_id" BIGINT NOT NULL,
"amount" MONEY NOT NULL,
"date_created" TIMESTAMP (6) WITH TIME ZONE NOT NULL,
"date_modified" TIMESTAMP (6) WITH TIME ZONE,
CONSTRAINT "pk-transaction-transaction_id"
PRIMARY KEY ("transaction_id"),
CONSTRAINT "fk-transaction-account_id-account-account_id"
FOREIGN KEY ("account_id")
REFERENCES "account" ("account_id")
ON DELETE RESTRICT
ON UPDATE CASCADE,
);
私は、トランザクション・エンティティが$アカウントのプロパティを持っていますが、アカウントのエンティティがないことがわかりphp bin/console doctrine:generate:entities
を使用してエンティティを生成すると$トランザクションエンティティがありません。これは、私のアカウントテーブルに外部キー制約を定義していないためと考えられます。私のコードで
、私は次のようで、私のアカウントオブジェクトを作成します。
$accounts = $this->getDoctrine()
->getRepository('BalancesBundle:Account')
->findAll();
私はその後、各アカウントの残高合計を取得するために、配列を反復処理したいと思います。長期的には、を呼び出してすべてのトランザクションを1つの合計に集計する、アカウントエンティティ内にヘルパーメソッドを作成したいと思います。
これは可能ですか?私は何かが欠落しているように感じ、私の唯一の手段はトランザクションエンティティ内からこれを行うことです。可能であれば、トランザクションエンティティからこれを行うことを避けたいと思います。
だけ注意を:Doctrineは関係をマッピングするためにDBを使用していません。マッピングを使用します。また、 'doctrine:generate:entities'はDBからのエンティティを生成するのではなく、マッピングから生成するので、最初に作成したと仮定します。 SQLテーブルを使い始めたので、 'doctrine:mapping:import'コマンドを使用したと仮定します。双方向のリレーションを持つ場合は、DBではなくマッピングを変更する必要があります。実際にはDBではなくマッピングを扱うべきです。 –
あなたが正しいです、私は最初にテーブルを作成し、インポートを使用しました。当時私はDoctrineが私にとって必要なSQLを生成できることに気づいていませんでした。私はおそらくここからその道を行くだろう。ヘッドアップをありがとう。 – dohpaz42