Я наконец нашел ответ:
Во-первых, кажется, что таблицы индексов не генерируются методом 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/>";
}
}