Make Local migrations for ElasticSearch

у меня есть два мапинг файла и csv файл, надо их закинуть в ES, я много что пробовал, вот код миграции с последними поправками: <?php

use yii\db\Migration;
use yii\elasticsearch\Connection;

/**

  • Class m240923_123235_create_index_for_elasticsearch
    /
    class m240923_123235_create_index_for_elasticsearch extends Migration
    {
    /
    *

    • {@inheritdoc}
      */
      public function safeUp()
      {
      $elasticsearch = new Connection([
      ‘nodes’ => [
      [‘http_address’ => ‘127.0.0.1:9200’],
      // Добавьте другие узлы, если у вас есть кластер
      ],
      ]);

      // Проверяем, существует ли индекс
      $indexName = ‘ul’;
      if (!$elasticsearch->createCommand()->indexExists($indexName)) {
      // Загружаем маппинг из файла
      $mappingFile = ‘C:\gleb\ip1.json’;
      $mapping = json_decode(file_get_contents($mappingFile), true);

       if ($mapping === null) {
           throw new \Exception("Failed to decode mapping file: $mappingFile");
       }
      
       // Создаем индекс с маппингом
       $elasticsearch->createCommand()->createIndex($indexName, $mapping);
      

      }

      // Открываем файл для чтения
      $filePath = ‘C:\OSPanel\domains\escompany.csv’;
      $file = fopen($filePath, “r”);

      if ($file === false) {
      throw new \Exception(“Failed to open file: $filePath”);
      }

      // Читаем заголовки столбцов
      $headers = fgetcsv($file);

      while (($line = fgetcsv($file)) !== false) {
      // Проверяем, что количество элементов в строке совпадает с количеством заголовков
      if (count($line) !== count($headers)) {
      continue; // Пропускаем строку, если количество элементов не совпадает
      }

       // Преобразуем строку CSV в ассоциативный массив
       $data = array_combine($headers, $line);
      
       // Добавляем документ в индекс
       $elasticsearch->createCommand()->insert($indexName, $data, uniqid());
      

      }

      // Закрываем файл
      fclose($file);
      }

    public function safeDown()
    {
    $elasticsearch = new Connection([
    ‘nodes’ => [
    [‘http_address’ => ‘127.0.0.1:9200’],
    // Добавьте другие узлы, если у вас есть кластер
    ],
    ]);

     // Удаляем индекс
     $indexName = 'ul';
     $elasticsearch->createCommand()->deleteIndex($indexName);
    

    }
    }
    /*
    // Use up()/down() to run migration code without a transaction.
    public function up()
    {

    }

    public function down()
    {
    echo “m240923_123235_create_index_for_elasticsearch cannot be reverted.\n”;

     return false;
    

    }
    */

Using three backticks ``` makes the code easier to read. Can you post the error message?

Использование трех обратных знаков ``` делает код более легким для чтения. Можете ли вы опубликовать сообщение об ошибке?

<?php

use yii\db\Migration;
use yii\elasticsearch\Connection;


class m240923_123235_create_index_for_elasticsearch extends Migration
{
    /*
    { @inheritdoc }
     */
    public function safeUp()
    {
        $elasticsearch = new Connection([
            'nodes' => [
                ['http_address' => '127.0.0.1:9200'],
                // Add more nodes if you have a cluster
            ],
        ]);

        // Check if index exists
        $indexName = 'ul';
        if (!$elasticsearch->createCommand()->indexExists($indexName)) {
            // Load mapping from file
            $mappingFile = 'C:\gleb\ip1.json';
            $mapping = json_decode(file_get_contents($mappingFile), true);

            if ($mapping === null) {
                throw new \Exception("Failed to decode mapping file: $mappingFile");
            }

            // Создаем индекс с маппингом
            $elasticsearch->createCommand()->createIndex($indexName, $mapping);
        }

        // Open the file for reading
        $filePath = 'C:\OSPanel\domains\escompany.csv';
        $file = fopen($filePath, "r");

        if ($file === false) {
            throw new \Exception("Failed to open file: $filePath");
        }

        // Read column headers
        $headers = fgetcsv($file);

        while (($line = fgetcsv($file)) !== false) {
            // Check that the number of elements in the line matches the number of headers
            if (count($line) !== count($headers)) {
                continue; // Skip the line if the number of elements does not match
            }

            // Преобразуем строку CSV в ассоциативный массив
            $data = array_combine($headers, $line);

            // Добавляем документ в индекс
            $elasticsearch->createCommand()->insert($indexName, $data, uniqid());
        }

        // Close the file
        fclose($file);
    }

    public function safeDown()
    {
        $elasticsearch = new Connection([
            'nodes' => [
                ['http_address' => '127.0.0.1:9200'],
                // Add more nodes if you have a cluster
            ],
        ]);

        // Удаляем индекс
        $indexName = 'ul';
        $elasticsearch->createCommand()->deleteIndex($indexName);
    }
}