Используя тот же запрос SQL, к сожалению, не представляется вполне возможно, насколько я могу сказать ...
О своей идее идти через базу данных, чтобы извлечь информацию о каждой таблицы для генерации некоторые классы PHP, это одна из вещей, которые делает Doctrine (самый известный PHP ORM).
Если вы загрузите его и посмотрите на классы в Doctrine/Import/[DatabaseType].php
, вы увидите, что это делается по-разному для каждого типа базы данных.
Например, для MySQL, следующий фрагмент кода используется в Doctrine_Import_Mysql
:
'listTableFields' => 'DESCRIBE %s',
С другой стороны, для PostgreSQL, у вас есть следующие, в Doctrine_Import_Pgsql
:
'listTableColumns' => "SELECT
a.attnum,
a.attname AS field,
t.typname AS type,
format_type(a.atttypid, a.atttypmod) AS complete_type,
a.attnotnull AS isnotnull,
(SELECT 't'
FROM pg_index
WHERE c.oid = pg_index.indrelid
AND a.attnum = ANY (pg_index.indkey)
AND pg_index.indisprimary = 't'
) AS pri,
(SELECT pg_attrdef.adsrc
FROM pg_attrdef
WHERE c.oid = pg_attrdef.adrelid
AND pg_attrdef.adnum=a.attnum
) AS default
FROM pg_attribute a, pg_class c, pg_type t
WHERE c.relname = %s
AND a.attnum > 0
AND a.attrelid = c.oid
AND a.atttypid = t.oid
ORDER BY a.attnum",
Не так просто, кажется ^^
И дальше по каждому классу, есть метод калла d listTableColumns
- который не является одинаковым для каждого типа базы данных ...
Так я предполагаю, что вещи будут, к сожалению, не так просто, как вы надеялись ...
Но, как заметка на полях: возможно, вы могли бы использовать Доктрину для этой части вашего проекта - возможно, быстрее, чем изобретать колесо ;-)
привет. Спасибо за обновление. У меня есть собственный проект под названием zend-db-model-generator, он находится в коде google. хочу немного улучшить его. – ufk
OK о наличии собственного проекта :-) ;; Повеселись ! –