【问题标题】:Propel custom Setter with SQL-specific stuff使用特定于 SQL 的东西推动自定义 Setter
【发布时间】:2010-11-07 07:29:42
【问题描述】:

我在 Symfony 1.0 项目中使用 Propel 1.2 和 PostgreSQL 数据库。我可以在 SELECT 语句中使用 Criteria::CUSTOM 来使用 Postgres 函数,如下所示(全文搜索):

`$c = new Criteria();

$c->add(MyTablePeer::FULLTEXT_COLUMN, MyTablePeer::FULLTEXT_COLUMN." @@ to_tsquery('english', '要搜索的文本')", Criteria::CUSTOM);`

选择记录没问题,但是插入呢?我目前正在使用原始 SQL 查询,但我想以更优雅的方式进行。 我在 Symfony 网站上看到了这个snippet,但它有很多代码,不符合我的需要。 性能非常重要,所以也许没有比编写原始 SQL 更好的解决方案了。

如何编写像 $object->setFulltextColumn($parameters) 这样的自定义设置器?

提前谢谢你

【问题讨论】:

    标签: php postgresql orm symfony1 propel


    【解决方案1】:

    对于全文列的插入/更新,为什么不使用触发器? 然后,当您更改一行的文本时,全文列将自动更新。

    CREATE TRIGGER my_table_fulltext_trigger 
    BEFORE INSERT OR UPDATE ON my_table 
    FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(
      'fulltext',
      'pg_catalog.english', 
      'column_with_text_1', 
      'column_with_text_2', 
      'column_with_text_N'
    );
    

    tsvector_update_trigger 过程的参数是: tsvector 全文列的名称、语言配置,然后是要索引的所有列的名称。

    【讨论】:

    • 好的,触发器是解决方案,但它是原始 SQL,正如我所说,没有适合这种情况的 Propel 技巧。谢谢!
    猜你喜欢
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多