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使おう。
かつ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使おう。
Comments
add a comment
This blog is gravatar enabled.
Your email adress will never be published.
Comment spam will be deleted!
