#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% в этом решении! Я верю, что это сработает, но я также считаю, что это должен быть лучший способ!