我正在ZF
+ Doctrine 1.2.3
中进行Web应用程序,但我有一个旧数据库,
它具有相当不错的结构,所以我认为我可以使用doctrine commad进行逆向工程
./doctrine generate-models-db
,
这太棒了,但当我想使用像searchable
这样的一些学说行为时,我停了下来。
我的问题:如果我去了我的模型并添加了这两行:
$this->actAs('Searchable', array(
'fields' => array('title', 'content')
)
);
我不确定这是否足够并且可以按预期工作。如果您有关于创建其他行为的更多提示(例如versionable
,i18n
,sluggable
或soft delete
),请手动或使用学说行为对其进行反向工程,请列出它们?
答案 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解决方案。