настройка режима выборки PDO

#pdo

#pdo

Вопрос:

У меня есть класс PDO, который использует setFetchMode (PDO::FETCH_CLASS, get_called_class()),

но прямо сейчас я создаю класс ‘factory’, который отображает таблицу, переданную через конструктор, и поэтому вместо того, чтобы иметь поля таблицы в качестве членов класса, отображающего таблицы, которые будут извлечены, у меня есть массив полей для сопоставления!

Пока все хорошо! Я думаю!

Но мне нужно адаптировать мой класс PDO, и я не знаю, как указать ему отображать ассоциативный массив вместо члена класса!

Кто-нибудь может дать мне подсказку, пожалуйста?

на моей фабрике классов у меня есть следующее:

 class factory extends Database
{

public $fields = array();
public $fieldnames  = array();
public $fieldvalues = array();

// Nomes das colunas com datas de criação e alteração do registo
static protected $insert_timestamp = 'datacriado';
static protected $update_timestamp = 'dataalterado';

// Array com defaults que são aplicados ao objecto antes de gravação na BD
static protected $defaults = array();

// Nome da tabela na base de dados
public $TABLENAME = "";

/*********************************************************************
/   Construtor.
*********************************************************************/
public function __construct($map)
{
    parent::__construct();

    $fp=fopen($map,"r");
    $map=fgets($fp);
    fclose($fp);
    $mapArr=explode(":",$map);
    $this->TABLENAME=$mapArr[0];
    $map=$map[1];
    $mapArr=explode(";",$map);
    foreach($mapArr as $v)
    {
        array_push($fieldnames,$v);
        array_push($fieldvalues,":".$v);
        array_push($fields[$v],'');
    }



    // definir DEFAULTS se houver

}
  

}

Я хочу, чтобы PDO выдавал мне массив $ fields вместо массива экземпляров класса.

Комментарии:

1. Моя цель — сделать мой фреймворк способным создавать таблицы и соответствующие карты во время выполнения и при этом иметь возможность использовать его инструменты!

2. решило бы проблему добавление общедоступного файла $map на фабрику и изменение вызова PDO на $sth->setFetchMode(PDO::FETCH_CLASS, get_called_class(), $this->map);? Я собираюсь попробовать это сейчас! Но мне нужно адаптировать несколько классов, прежде чем я смогу это по-настоящему протестировать! Приветствуется любая подсказка! Спасибо!

Ответ №1:

Я думаю, что нашел решение, использую setFetchMode(PDO::FETCH_ASSOC) и создаю функцию для анализа результата через $this-map и возвращает проанализированный результат вместо самого результата PDO!

Пожалуйста, прокомментируйте! Я не уверен на 100% в этом решении! Я верю, что это сработает, но я также считаю, что это должен быть лучший способ!