從我收集的內容來看,Symfony 2/Doctrine使用數據庫定義(在我的情況下是外鍵約束)來映射實體之間的關係。我特別希望能夠從兩面關聯兩張表,但我不想在每張表中創建多餘的外鍵。在這種情況下,我有一個Account
表和一個Transaction
表。從Table到外部表的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();
然後我會想迭代這個數組以獲取每個賬戶總餘額。從長遠來看,我想在我的賬戶實體中創建一個幫助方法,該方法將調用getTransactions()
將所有交易累計爲一個總計。
這可能嗎?我覺得我錯過了一些東西,而我唯一的追求就是從交易實體內部做到這一點。如果可能的話,我想避免從交易實體那裏做這件事。
剛一說明:學說不使用DB映射關係。它使用映射。另外'教條:生成:實體'不會從數據庫生成實體,而是從映射生成實體,所以我假設您已經先創建了它們。既然你從sql表開始,我假設你使用了'doctrine:mapping:import'命令。如果你想有雙向關係,你應該修改你的映射,而不是數據庫。其實你應該使用映射而不是數據庫。 –
你是對的,我先創建了表格,然後使用了導入。當時我不知道Doctrine可以爲我生成必要的SQL。我可能會從這裏出去。謝謝你的頭。 – dohpaz42