学说行为,如果我这样做,会是正确的吗?

时间:2011-02-28 21:06:27

标签: zend-framework doctrine reverse-engineering


我正在ZF + Doctrine 1.2.3中进行Web应用程序,但我有一个旧数据库,

它具有相当不错的结构,所以我认为我可以使用doctrine commad进行逆向工程

./doctrine generate-models-db

这太棒了,但当我想使用像searchable这样的一些学说行为时,我停了下来。

我的问题:如果我去了我的模型并添加了这两行:

$this->actAs('Searchable', array(
  'fields' => array('title', 'content')
   )
);

我不确定这是否足够并且可以按预期工作。如果您有关于创建其他行为的更多提示(例如versionablei18nsluggablesoft delete),请手动或使用学说行为对其进行反向工程,请列出它们?

2 个答案:

答案 0 :(得分:0)

您是否希望对数据库进行逆向工程,然后使用可搜索的行为?

首先,您可以使用“generate-yaml-db”CLI任务从现有数据库模式生成YAML文件。此后,您可以设置关系并添加必要的行为,例如Timestampable,Searchable,或者您可以自行推出。完成所有这些后,您可以使用“generate-models-yaml”CLI任务生成模型。

如果您添加了行为或对架构进行了任何更改,则可以生成迁移差异“generate-migrations-diff”。这将创建迁移类,可用于将YAML文件中所做的新更改应用于db。运行“migrate”CLI任务以将更改应用于db。

希望它有所帮助。

答案 1 :(得分:0)

简单地添加

$this->actAs('Searchable', array(
'fields' => array('title', 'content')
 )
);

还不够。我自己从未使用它,但是如果你看一下docs,你就会看到它为索引生成另一个表。

CREATE TABLE job_index (id BIGINT, 
keyword VARCHAR(200), 
field VARCHAR(50), 
position BIGINT, 
PRIMARY KEY(id, keyword, field, position)) ENGINE = INNODB

用于模型定义,如

class Job extends Doctrine_Record
{
    public function setUp()
    {
        $this->actAs('Searchable', array(
                'fields' => array('title', 'content')
            )
        );
    }
 //....more methods
}

如果您需要的升沉搜索行为比Doctrine可以做的更多,您应该使用fulltext-searches查看数据库级别的搜索,或者甚至使用Lucene等外部解决方案(使用可选的Solr)Doctrine Searchable Behavior vs Zend Lucene in symfony为您提供更多相关信息。如果你有大量的数据需要搜索并且需要精确控制,你应该仔细研究Lucene,因为在大多数情况下它会击败纯MySQL / Doctrine解决方案。