Первый блин всегда комом. Скриншот попытки реализовать отражение структуры БД в классы PHP. Полдня было потрачено вообще на саму попытку выполнить эту команду.
$ php symfony propel:build-model
Дело все в том что, исполнять ее надо было вот так
$ /usr/local/php5/bin/php-cgi symfony propel:build-model
Картинка как бы говорит мне о том, что придется еще кое с чем разобраться.
Всё время делаю вот так:
./symfony propel:build-model
Здорово, не знал. Мне осталось все же разобраться о с типами данных в propel модели и все же добить ORM отображение в классы
ORM вообще плохая идея и плохой подход.
А что лучше? Я вообще хочу освоить сам фреймворк, иду тупо по хелпу с хабра. Там она представлена как вариант. Еще Doctrine вроде есть.
А что лучше — это сферический вопрос в вакууме :) Но ORM для вэбни — неоправданное усложнение, не дающее видимых преимуществ.
Понятно :-)
Просто было время, приходилось ручками создавать базу и всю дублирующую структуру потом в php файлах описывать, а тут как бы один раз пишешь текстовый файл (xml, yml), а потом одной командой делаешь то что ранее делалось ручками и у тебя и классы и база на выходе
пытаюсь сформировать базу со структуры
/usr/local/php5/bin/php-cgi symfony propel:insert-sql
вываливаюсь куда-то сюда
build-propel.xml:275:1: [wrapped: could not find driver]
Ну если все драйвера в самом PHP есть, то смотри propel.ini и databases.yml
Вообще с Propel надо разобраться как он работает и перейти на Doctrine.
Propel надо знать только в случае, если будешь работать в Symfony-конторе. Там обычно много Propel-кода, с которым прийдется колупаться.
это php -m
[PHP Modules]
bcmath
cgi
ctype
curl
date
dba
dbase
dom
filter
ftp
gd
gettext
hash
iconv
imap
json
libxml
mbstring
mysql
mysqli
openssl
pcre
PDO
pdo_sqlite
posix
Reflection
session
SimpleXML
sockets
SPL
standard
tokenizer
xml
xmlreader
xmlwriter
xsl
zip
zlib
это
propel.ini
propel.targetPackage = lib.model
propel.packageObjectModel = true
propel.project = sf_sandbox
propel.database = mysql
propel.database.driver = mysql
propel.database.url = mysql:dbname=u39809_links;host=u39809.mysql.masterhost.ru
propel.database.creole.url = ${propel.database.url}
propel.database.user = u39809
propel.database.password = **********
propel.mysql.tableType = InnoDB
propel.addVendorInfo = true
propel.addGenericAccessors = true
propel.addGenericMutators = true
propel.addTimeStamp = true
propel.addValidators = false
propel.useDateTimeClass = true
propel.defaultTimeStampFormat = Y-m-d H:i:s
propel.defaultTimeFormat = H:i:s
propel.defaultDateFormat = Y-m-d
propel.schema.validate = false
propel.samePhpName = false
propel.disableIdentifierQuoting = false
propel.emulateForeignKeyConstraints = true
; directories
propel.home = .
propel.output.dir = /var/www/production/sfweb/www/cache/symfony-for-release/1.2.8/sf_sandbox
propel.schema.dir = ${propel.output.dir}/config
propel.conf.dir = ${propel.output.dir}/config
propel.phpconf.dir = ${propel.output.dir}/config
propel.sql.dir = ${propel.output.dir}/data/sql
propel.runtime.conf.file = runtime-conf.xml
propel.php.dir = ${propel.output.dir}
propel.default.schema.basename = schema
propel.datadump.mapper.from = *schema.xml
propel.datadump.mapper.to = *data.xml
; builder settings
propel.builder.peer.class = plugins.sfPropelPlugin.lib.builder.SfPeerBuilder
propel.builder.object.class = plugins.sfPropelPlugin.lib.builder.SfObjectBuilder
propel.builder.objectstub.class = plugins.sfPropelPlugin.lib.builder.SfExtensionObjectBuilder
propel.builder.peerstub.class = plugins.sfPropelPlugin.lib.builder.SfExtensionPeerBuilder
propel.builder.objectmultiextend.class = plugins.sfPropelPlugin.lib.builder.SfMultiExtendObjectBuilder
propel.builder.mapbuilder.class = plugins.sfPropelPlugin.lib.builder.SfMapBuilderBuilder
propel.builder.addIncludes = false
propel.builder.addComments = true
propel.builder.addBehaviors = true
это
shema.yml
propel:
goods:
_attributes: { phpName: Goods }
id: ~
category: { type: varchar(255), required: true }
is_order: { type: boolean, required: true, default: 1 }
price_min: { type: longvarchar }
price_max: { type: longvarchar }
is_trade: { type: boolean, required: true, default: 1 }
city: { type: varchar(255) }
date: { type: varchar(255) }
period: { type: varchar(255) }
year: { type: varchar(255) }
is_documentation: { type: boolean, required: true, default: 1 }
is_delivery: { type: boolean, required: true, default: 1 }
is_demand: { type: boolean, required: true, default: 1 }
user { type: varchar(255) }
created_at: ~
category:
_category: { phpName: Category }
id: ~
name: { type: varchar(255), required: true }
created_at: ~
category_s1:
_category: { phpName: CategoryS1 }
id: ~
name: { type: varchar(255) }
description: { type: varchar(255) }
created_at: ~
category_s2:
_category: { phpName: CategoryS2 }
id: ~
name: { type: varchar(255) }
description: { type: varchar(255) }
created_at: ~
users:
_category: { phpName: Users }
id: ~
type: { type: integer }
name: { type: varchar(255) }
country: { type: varchar(255) }
city: { type: varchar(255) }
address_type_1: { type: varchar(255) }
address_type_2: { type: varchar(255) }
persons: { type: varchar(255) }
logo: { type: varchar(255) }
nikname: { type: varchar(255) }
password: { type: varchar(255) }
rating: { type: integer }
phone: { type: varchar(255) }
fax: { type: varchar(255) }
email: { type: varchar(255) }
auto: { type: integer }
date: { type: varchar(255) }
user_type:
_category: { phpName: UserType }
id: ~
level: { type: integer }
person:
_category: { phpName: Person }
id: ~
name: { type: varchar(255) }
avatar: { type: varchar(255) }
icq: { type: varchar(255) }
email: { type: varchar(255) }
skype: { type: varchar(255) }
phone1: { type: varchar(255) }
phone2: { type: varchar(255) }
fax: { type: varchar(255) }
opinion:
_category: { phpName: Opinion }
id: ~
u_sender_id: { type: integer }
u_object_id: { type: integer }
text: { type: varchar(255) }
Не в теме, но предположу, что нема PEAR-а и его mysql-адаптера.
Symfony без Pear отлично робе.
Мне кажется не хватает pdo_mysql
причем я это все пытаюсь запихнуть в mysql все же предварительно выполняя
$ php symfony configure:database «mysql:dbname=symfony_project;host=localhost» root mypassword
и это прокатывает… а дальше затыкается на
$ php symfony propel:insert-sql
там два варианта разворачивания
с PEAR и грубо говоря из архива. так как PEAR нема, я решил из архива
но все равно спотыкаюсь
>Мне кажется не хватает pdo_mysql
>PDO
>pdo_sqlite
упс… а его реально не хватает
спасибо. буду пере собирать php ручками сейчас
Не. В symfony-конторе вряд ли. Если только потом все свои последующие буду на нем делать, если сейчас понравится
А чем принципиально Doctrine от Propel отличается? Нагрузка?
А чем принципиально Doctrine от Propel отличается?
В Doctrine можно пользоваться DQL (Это такой универсальный SQL), а в Propel такого нет, можно только через задницу чистый SQL заряжать.
В Doctrine можно легко выбирать что получать на выходе ( вложенный массив или ORM объекты )
Many-to-Many в Doctrine на порядок проще.
Родная поддержка NestedSet
Не нужно писать собственные методы Гидрации для получения объектов из сложных забросов.