不是由generateModelsFromYaml生成的主义搜索索引模型

问题描述

|| 我正在尝试使用Doctrine 1.2的搜索行为为我的项目构建搜索引擎,我遵循手册的重新编写,并使用对我的搜索字段的引用来构建YAML。 并调用generateModelsFromYaml函数来创建我的PHP模型,所有的PHP模型都没有错误创建,但是缺少搜索索引表的模型... 我的YAML文件的摘录:
DIFFichier:
  tableName: ens_diffusion.DIF_Fichiers
    columns:
      DOC_Id:
        type: integer(4)
        primary: true
        notnull: true
        autoincrement: true
      DOC_Categorie:
        type: integer(4)
        default: 0
      DOC_Description:
        type: string(256)
      DOC_Adresse:
        type: string(256)
        options:
          charset: utf8
          type: InnoDB
    actAs:
      Searchable:
      fields: [DOC_Description] 
seachable字段是在模型中生成的,这里我正确地生成一个名为\“ DIFFichier \”的模型,但是缺少了相应的索引表\“ d_i_f_fichier_index \”
    $searchable0 = new Doctrine_Template_Searchable(array(
         \'fields\' => 
         array(
          0 => \'DOC_Description\',),));
    $this->actAs($searchable0);
我用这种方式生成我的PHP模型
include_once \"Doctrine-1.2.3/Doctrine.PHP\";
spl_autoload_register(array(\'Doctrine\',\'autoload\'));

    Doctrine::generateModelsFromYaml(
    \'diffusion2.yml\',\'C:\\Documents and Settings\\admin\\Desktop\\modelsDoctrine\',array(
        \'doctrine\'
    ),array(
        \'classprefix\' => \'Diffusion_Model_\',\'classprefixFiles\' => false
    )
);
我仍然无法生成索引表,还有其他方法可以从YAML文件生成表吗?     

解决方法

        我终于找到了答案: 首先,似乎索引表不是由generateModelsFromYaml()方法生成的,而是更有可能根据Doctrine的需要直接在数据库上创建的。 因此,我尝试通过在先前生成的模型上使用generateSqlFromArray()手动生成它们,但是Doctrine在创建主键字段时引发异常。经过一些研究,我发现在创建索引表的情况下,索引的主键必须为小写。 但是数据库的方案被锁定了。所以我找到了一种解决方法: 我在YAML文件上运行了一个小的正则表达式,以使所有主键都变为小写,因此像\“ IND_Id \”这样的键就变成了\“ ind_id \”。 我使用新的YAML模板再次生成了模型。 我在新创建的模型上调用了generateSqlFromArray()方法,并提取了索引表的SQL CREATE。 我将此SQL代码粘贴到了数据库中 现在,即使使用我的原始型号,尽管它们的主键仍然是大写字母,但一切仍然正常。 这是我创建的小写主键脚本
$src = file_get_contents(\"source.yml\");

//Lower case the primary key
$src = preg_replace(\"/([A-Z]{3}_[A-Z]{1}[a-z]*:)/e\",\"strtolower(\'\\\\1\')\",$src);

file_put_contents(\"source_lower.yml\",$src);
现在是用于生成索引表的SQL创建代码的脚本
require_once(\"../config.php\");

$tables = array();
$dirname = \'../include/models/generated/\';
$dir = opendir($dirname); 

//Extract the classname from the filenames
while($file = readdir($dir)) {
    if($file != \'.\' && $file != \'..\' && !is_dir($dirname.$file)){

        $classe = substr($file,4,strlen($file) -8);
        $tables[] = $classe;
    }
}

//Generate SQL create for index tables
foreach($tables as $t){
    $sql = Doctrine_Core::generateSqlFromArray(array($t));
    afficher($sql[1]);
}

//Print the SQL code if CREATE
function afficher($str){
    if(substr($str,6) == \"CREATE\"){
        echo $str.\";<br/>\";
    }
}
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...