Создание модели из таблицы MySQL с помощью PDO

Я разрабатываю приложение для удовольствия, и я целенаправленно НЕ использую какие-либо фреймворки, кроме усов для 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);

}

Я хочу игнорировать любые поля с пустыми или пустыми значениями, как будто они не существуют, и формировать массив со столбцами в базе данных с несколькими строками данных. Я также понимаю, что использование fetch для отдельных экземпляров, таких как заголовок страницы и fetchAll, будет работать для нескольких строк, однако я хочу устранить это.

Это то, что моя таблица & lt; code & gt; view_data_main & lt; / code & gt; похоже:


Чтобы шаблоны правильно связывались, вывод данных должен выглядеть примерно так:

 {
module_name: 'main',
module_title: 'Main',
module_images: ['http://...', 'http://...', 'http://...'],
module_scripts: ['http://...','http://...','http://...',]
}

Вместо этого с fetch все получаю

[{
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 макс., И к таблицам представления, кроме таблиц представления, не будет осуществляться доступ с использованием подстановочного знака. Тем не менее, наряду с динамическими именами col от представления к представлению, ОЧЕНЬ МЕНЬШЕ кода для написания. Я надеюсь, что это никого не оскорбляет 🙂

Спасибо всем за помощь.

2

Решение

Это то, что вы после ??

CREATE TABLE view_data_main (
module_name VARCHAR(30),
module_title VARCHAR(30),
module_images VARCHAR(30),
module_scripts VARCHAR(30)
)

INSERT INTO `view_data_main` (module_name,module_title,module_images,module_scripts) VALUES
('welcome','main','http://www.test.com','http://www.test2.com'),
(NULL,NULL,'http://www.test.com','http://www.test2.com'),
(NULL,NULL,'http://www.test.com','http://www.test2.com')

SELECT module_name,module_title,GROUP_CONCAT(module_images),GROUP_CONCAT(module_scripts)
FROM `view_data_main`
WHERE module_images IS NOT NULL AND module_scripts IS NOT NULL
GROUP BY CONCAT(module_images,',',module_scripts)

Перечитав вопрос, я не думаю, что подзапрос необходим, если я что-то упустил?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]