bloggalleryaboutcontact

Symfony+PostgreSQLで、ORM側でcascade deleteしたい

そもそもPostgreSQLなら、ORMでやらんでもいい話なんですが。
かつSymfonyのソース見ると「遅いからORMにcascadeさせんじゃねー」って書いてはいるものの。
いかんせんそういう場面ってあるじゃないですか。

schema.ymlに
onDelete: cascade
なんて書けばさっくりうまくいくかと思いきや全然うまくいかない。
隣を見る気配もない。
あれれーと思って調べてみたら、「MySQLのMyISAMとかSQLiteなら動くよ」って書いてある。
逆にDBでCASCADE持ってるんならそっちでやれと。

でもSQL流すの嫌だなーORM頑張れよーとか思って探したら、propel.iniに
propel.emulateForeignKeyConstraints = true
と書けばちゃんとdoOnDeleteCascade()が生成されてた。よしよし。

が、結局動かず。
なんでだろーなんでだろーとdebug吐いたらそもそもdoDeleteを通ってない。
あれれーと思ってsfPropelParanoidBehaviorPluginを挟んでいることに気づく。
要は論理削除が全部doUpdateで動いているので、そもそもかみ合わないと言う。orz

結論:Doctrine使おう。
 Permalink