Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不是由generateModelsFromYaml()生成的条令搜索索引模型_Php_Mysql_Search_Doctrine - Fatal编程技术网

Php 不是由generateModelsFromYaml()生成的条令搜索索引模型

Php 不是由generateModelsFromYaml()生成的条令搜索索引模型,php,mysql,search,doctrine,Php,Mysql,Search,Doctrine,我正试图用1.2条原则的搜索行为为我的项目构建一个搜索引擎,我按照手册的建议,构建了一个YAML,其中引用了我的搜索字段。 并调用generateModelsFromYaml函数来创建我的php模型,所有的php模型都是创建的,没有错误,但是搜索索引表的模型丢失了 我的YAML文件的摘录: DIFFichier: tableName: ens_diffusion.DIF_Fichiers columns: DOC_Id: type: integer(4)

我正试图用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] 
可搜索字段是在模型中生成的,这里我正确地生成了一个名为“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, 0, 6) == "CREATE"){
        echo $str.";<br/>";
    }
}
require_once(../config.php”);
$tables=array();
$dirname='../include/models/generated/';
$dir=opendir($dirname);
//从文件名中提取类名
而($file=readdir($dir)){
如果($file!='.&&$file!='..'&&&!is_dir($dirname.$file)){
$classe=substr($file,4,strlen($file)-8);
$tables[]=$classe;
}
}
//为索引表生成SQL创建
foreach($t表格){
$sql=Core::generateSqlFromArray(array($t));
词缀($sql[1]);
}
//如果要创建,请打印SQL代码
函数附加器($str){
if(substr($str,0,6)=“CREATE”){
echo$str.“;
”; } }