Суть вопроса: Есть две таблицы, настроена связь поля одной таблицы к полю другой. Как через запрос к базе данных получить эту связь? Чтобы затем код зная связь сформировал нужный запрос.
edogs software
ArbNet :
В который раз переделываю работу с базой данных.
Суть вопроса: Есть две таблицы, настроена связь поля одной таблицы к полю другой. Как через запрос к базе данных получить эту связь? Чтобы затем код зная связь сформировал нужный запрос.
Если мы правильно поняли Ваш крайне невнятно заданный вопрос, то
show create table blabla_table
и дальше разбирайте получившийся результат и смотрите на связи.
p.s.: Можно достать запросов из INFORMATION_SCHEMA , но туда доступ не всегда есть.
Sly32
Допустим, есть таблица
CREATE TABLE form ( id SERIAL NOT NULL, name VARCHAR NOT NULL, origin_doc_link VARCHAR, document_type VARCHAR, is_active BOOLEAN, fields_config JSON, state state, created_at TIMESTAMP WITHOUT TIME ZONE, updated_at TIMESTAMP WITHOUT TIME ZONE, draft BOOLEAN, PRIMARY KEY (id), UNIQUE (name), UNIQUE (origin_doc_link) );
CREATE TABLE product_type ( id SERIAL NOT NULL, name VARCHAR, display_name VARCHAR, is_default BOOLEAN, PRIMARY KEY (id) );
CREATE TABLE form_product_types ( id SERIAL NOT NULL, form_id INTEGER, product_type_id INTEGER, is_checked BOOLEAN, PRIMARY KEY (id), FOREIGN KEY(form_id) REFERENCES form (id) ON DELETE CASCADE, FOREIGN KEY(product_type_id) REFERENCES product_type (id) ON DELETE CASCADE );
Тебе надо выбрать форму и все продукт тайпы по айди
Тогда это будет примерно так:
SELECT form.name, form.document_type, pt.name, pt.display_name, pt.is_default FROM form JOIN form_product_types as fpt ON form.id = fpt.form_id JOIN product_type as pt ON fpt.product_type_id = pt.id WHERE form.id = 18;
Это крайне примитивный пример, но приниип такой — джойнишь нужные таблицы и собираешь ответ.
Любая ОРМ это сделает проще и понятнее, но ты же противник)
Такие простые запросы довольно редко встречаются в реальной жизни.
ArbNet
edogs software #: show create table blabla_table
Спасибо. Я надеялся, что есть ещё какой-то способ получить связи, но видно придётся обрабатывать ответ show create table.
edogs software
ArbNet #:
Спасибо. Я надеялся, что есть ещё какой-то способ получить связи, но видно придётся обрабатывать ответ show create table.
Если есть полный доступ, то лучше брать из INFORMATION_SCHEMA информацию, просто загляните в табличку, там все очевидно и распарсивать так сильно не надо. show create table может вести себя неадекватно, особенно если это марияДБ
ArbNet
Sly32 #:
Это крайне примитивный пример, но приниип такой — джойнишь нужные таблицы и собираешь ответ.
Любая ОРМ это сделает проще и понятнее, но ты же противник)
Такие простые запросы довольно редко встречаются в реальной жизни.
Да я знаю. Я мог бы сделать как обычно делается. Но я решил опять продумать всевозможные варианты которые могут быть.
У меня есть узел Сущности. Затем узел Сущности подключает класс нужной сущности и вызывает методы(получить данные, добавить, удалить и тд.). Разработчик может добавлять удалять сущности через контрольную панель, прописывать в структуре команды. Движок наткнувшись на команду получения данных обращается к классу узла Сущности, этот класс подключает класс нужной сущности и вызывается методы получения, добавления, изменения и тд. Получив данные движок может ими заполнить макет(html шаблон компонента)
Данные сущности могут браться из разных таблиц, связи я могу прописывать и в классе, но для целостности данных думаю в самой базе устанавливать связи таблиц и потом двиг эти связи мог определять и формировать нужный запрос.
Sly32
ArbNet #: Данные сущности могут браться из разных таблиц, связи я могу прописывать и в классе, но для целостности данных думаю в самой базе устанавливать связи таблиц и потом двиг эти связи мог определять и формировать нужный запрос.
Обычно класс — это просто модель таблиц, и если ты точно знаешь что должно быть — надежнее сделать связи в БД. Это и быстрее и проще написать обертку аля ОРМ, которая потом твои сущности будет собирать. При это в некоторых ситуациях это необходимо. Также поможет сократить количество запросов. Но опять же — ты можешь взять ОРМку от того же Ларавел/Симфони и допилить ее под свои нужды. Времени займет меньше, результат будет лучше.
ArbNet
В который раз переделываю работу с базой данных.
Суть вопроса: Есть две таблицы, настроена связь поля одной таблицы к полю другой. Как через запрос к базе данных получить эту связь? Чтобы затем код зная связь сформировал нужный запрос.
edogs software
В который раз переделываю работу с базой данных.
Суть вопроса: Есть две таблицы, настроена связь поля одной таблицы к полю другой. Как через запрос к базе данных получить эту связь? Чтобы затем код зная связь сформировал нужный запрос.
Если мы правильно поняли Ваш крайне невнятно заданный вопрос, то
show create table blabla_table
и дальше разбирайте получившийся результат и смотрите на связи.
p.s.: Можно достать запросов из INFORMATION_SCHEMA , но туда доступ не всегда есть.
Sly32
Допустим, есть таблица
Тебе надо выбрать форму и все продукт тайпы по айди
Тогда это будет примерно так:
Это крайне примитивный пример, но приниип такой — джойнишь нужные таблицы и собираешь ответ.
Любая ОРМ это сделает проще и понятнее, но ты же противник)
Такие простые запросы довольно редко встречаются в реальной жизни.
ArbNet
show create table blabla_table
Спасибо. Я надеялся, что есть ещё какой-то способ получить связи, но видно придётся обрабатывать ответ show create table.
edogs software
Спасибо. Я надеялся, что есть ещё какой-то способ получить связи, но видно придётся обрабатывать ответ show create table.
Если есть полный доступ, то лучше брать из INFORMATION_SCHEMA информацию, просто загляните в табличку, там все очевидно и распарсивать так сильно не надо. show create table может вести себя неадекватно, особенно если это марияДБ
ArbNet
Это крайне примитивный пример, но приниип такой — джойнишь нужные таблицы и собираешь ответ.
Любая ОРМ это сделает проще и понятнее, но ты же противник)
Такие простые запросы довольно редко встречаются в реальной жизни.
Да я знаю. Я мог бы сделать как обычно делается. Но я решил опять продумать всевозможные варианты которые могут быть.
У меня есть узел Сущности. Затем узел Сущности подключает класс нужной сущности и вызывает методы(получить данные, добавить, удалить и тд.). Разработчик может добавлять удалять сущности через контрольную панель, прописывать в структуре команды. Движок наткнувшись на команду получения данных обращается к классу узла Сущности, этот класс подключает класс нужной сущности и вызывается методы получения, добавления, изменения и тд. Получив данные движок может ими заполнить макет(html шаблон компонента)
Данные сущности могут браться из разных таблиц, связи я могу прописывать и в классе, но для целостности данных думаю в самой базе устанавливать связи таблиц и потом двиг эти связи мог определять и формировать нужный запрос.
Sly32
Данные сущности могут браться из разных таблиц, связи я могу прописывать и в классе, но для целостности данных думаю в самой базе устанавливать связи таблиц и потом двиг эти связи мог определять и формировать нужный запрос.
Обычно класс — это просто модель таблиц, и если ты точно знаешь что должно быть — надежнее сделать связи в БД. Это и быстрее и проще написать обертку аля ОРМ, которая потом твои сущности будет собирать. При это в некоторых ситуациях это необходимо. Также поможет сократить количество запросов. Но опять же — ты можешь взять ОРМку от того же Ларавел/Симфони и допилить ее под свои нужды. Времени займет меньше, результат будет лучше.