Я разрабатываю приложение для удовольствия, и я целенаправленно НЕ использую никаких фреймворков, кроме усов для PHP и JS и т. д., ни на клиентской, ни на серверной стороне скромного приложения.
Каждое представление имеет таблицу, в которой хранятся все данные, используемые для каждого из них. Я хочу выполнить запрос, который выбирает каждый столбец в таблице и делает его доступным для моего шаблона усов.
Я НЕ хочу менять методы для доступа к какому-либо конкретному столбцу во время выполнения. fetchAll дает мне массу нулевых полей в возвращаемых данных, которые мне не нужны, в то время как fetch() дает мне красивую структуру JSON, содержащую все правильные данные, кроме столбца, содержащего более одной строки данных, отображаемых только для первой строки /пример.
Вот мой метод PHP:
public function get_view($view_name , $out_type = "raw"){
// Col names may vary from view table to view table
$statement = $this->prep_sql("SELECT * FROM `$view_name`");
$statement->execute(array());
$view_data = $statement->fetch(); // I know fetchAll will work for arrays but how then will my mustache template bind to data returned from columns with more than one row?
return (strtoupper($out_type) === "JSON" ? json_encode($view_data) : $view_data);
}
Я хочу игнорировать любые поля с нулевым или пустым значением, как если бы они не существовали, и формировать массив со столбцами в базе данных с несколькими строками данных. Я также понимаю, что использование выборки для отдельных экземпляров, таких как заголовок страницы и fetchAll, будет работать для нескольких строк, однако я хочу устранить это.
Чтобы шаблоны правильно связывались, выходные данные должны выглядеть примерно так:
{
module_name: 'main',
module_title: 'Main',
module_images: ['http://...', 'http://...', 'http://...'],
module_scripts: ['http://...','http://...','http://...',]
}
Вместо этого я получаю fetchAll
[{
module_name: 'main',
module_title: 'Main',
module_images: 'http://...', // 1
module_scripts: 'http://...' // 1
}, {
module_name: null,
module_title: null,
module_images: 'http://..', // 2
module_scripts: 'http://..' // 2
}];
Я знаю, что SELECT * не является традиционным способом выбора всех ваших данных представления, однако количество столбцов в каждой таблице представления будет меньше 100 максимум, и никакие таблицы, кроме таблиц представлений, не будут доступны с использованием выбора подстановочного знака. Тем не менее, наряду с динамическими именами столбцов от представления до представления, означает НАМНОГО меньше кода для написания. Надеюсь, это никого не обидит :)
Всем сердечно благодарю за помощь.