Doctrine2 のセットアップはすべて YAML ファイル内で行われます。私は prePersist 関数を実行しようとしている LoanAppMenuProgress という名前のエンティティ クラスを持っています。この LoanAppMenuProgress エンティティには、LoanApp という名前の別のクラスとの oneToOne 関係があります。DB 内の LoanApp テーブルに関連付けられた LoanAppMenuProgress テーブルには、外部キーの関連付けがあります。
LoanApp.LoanAppMenuProgress.orm.yml の LoanAppMenuProgress クラスの構成は次のとおりです。
LoanEv\LoanAppBundle\Entity\LoanApp\LoanAppMenuProgress:
type: entity
repositoryClass: LoanEv\LoanAppBundle\Repository\LoanApp\LoanAppMenuProgress
table: loan_app_menu_progress
id:
id:
type: integer
generator: { strategy: auto }
### This is the OWNING side of the relationship
oneToOne:
loan_app:
targetEntity: LoanApp
inversedBy: loanapp_menu
joinColumn:
name: loan_id
referencedColumnName: id
fields:
loan_id:
type: integer
menu_id2:
type: integer
menu_id3:
type: integer
menu_id4:
type: integer
lifecycleCallbacks:
prePersist: [ updateMainMenuStatus ]
これは私の LoanApp.LoanApp.orm.yml ファイルです:
LoanEv\LoanAppBundle\Entity\LoanApp\LoanApp:
type: entity
repositoryClass: LoanEv\LoanAppBundle\Repository\LoanApp\LoanAppRepository
table: loan_app
id:
id:
type: integer
generator: { strategy: auto }
## This is the INVERSE side of the relationship.
oneToOne:
loanapp_menu:
targetEntity: LoanAppMenuProgress
mappedBy: loan_app
fields:
bank_id:
type: integer
# etc.
私の LoanAppMenuProgress Entity クラスには、次のコードがあります。
namespace LoanEv\LoanAppBundle\Entity\LoanApp;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Util\Debug;
/**
* LoanEv\LoanAppBundle\Entity\LoanApp\LoanAppMenuProgress
*/
class LoanAppMenuProgress
{
private $id;
private $loan_id;
/**
* @var LoanEv\LoanAppBundle\Entity\LoanApp\LoanApp
*/
private $loan_app;
private $menu_id2 = 0;
private $menu_id3 = 0;
private $menu_id4 = 0;
// ...
public function updateMainMenuStatus()
{
echo("Inside prePersist's updateMainMenuStatus function. ");
}
}
次のコードは、LoanAppController クラス内から呼び出されます。
// ...
//Save the menuStatus changes.
echo("About to persist. ");
$em->persist($menuStatus[0]);
echo("Done persisting.");
$em->flush();
// ...
LoanAppController でコードを実行すると、次のように画面に書き込まれます。
「持続しようとしています。持続を完了しました。」
出力が読み取られるはずの真ん中にそのビットがありません:
「永続化しようとしています。prePersist の updateMainMenuStatus 関数内。永続化を完了しました。」
変更はデータベースに書き込まれ、prePersist() を除いて、システムのすべての機能は期待どおりに動作しています。私はかなり長い間 yml の設定に苦労してきたので、私の最初の仮定は、YAML の設定が間違っているということです。
ドキュメント (私が理解できる限り) には、lifecycleCallbacks: および prePersist: アイテムを yml ファイルに追加し、永続エンティティにパブリック関数があることを確認する必要があると記載されています。明らかに、私は何かが欠けています。
誰にもアイデアはありますか?
ありがとう。