propel build:model

By | 8 сентября, 2009

Первый блин всегда комом. Скриншот попытки реализовать отражение структуры БД в классы PHP. Полдня было потрачено вообще на саму попытку выполнить эту команду.

$ php symfony propel:build-model

Дело все в том что, исполнять ее надо было вот так

$ /usr/local/php5/bin/php-cgi symfony propel:build-model

Картинка как бы говорит мне о том, что придется еще кое с чем разобраться.

symfony

  • http://uadev.net Yuretsz

    Всё время делаю вот так:
    ./symfony propel:build-model

  • http://serg-smirnoff.com serg-smirnoff

    Здорово, не знал. Мне осталось все же разобраться о с типами данных в propel модели и все же добить ORM отображение в классы

  • mkrentovskiy

    ORM вообще плохая идея и плохой подход.

  • http://serg-smirnoff.com serg-smirnoff

    А что лучше? Я вообще хочу освоить сам фреймворк, иду тупо по хелпу с хабра. Там она представлена как вариант. Еще Doctrine вроде есть.

  • mkrentovskiy

    А что лучше — это сферический вопрос в вакууме :) Но ORM для вэбни — неоправданное усложнение, не дающее видимых преимуществ.

  • http://serg-smirnoff.com serg-smirnoff

    Понятно :-)

    Просто было время, приходилось ручками создавать базу и всю дублирующую структуру потом в php файлах описывать, а тут как бы один раз пишешь текстовый файл (xml, yml), а потом одной командой делаешь то что ранее делалось ручками и у тебя и классы и база на выходе

  • http://serg-smirnoff.com serg-smirnoff

    пытаюсь сформировать базу со структуры

    /usr/local/php5/bin/php-cgi symfony propel:insert-sql

    вываливаюсь куда-то сюда

    build-propel.xml:275:1: [wrapped: could not find driver]

  • http://uadev.net Yuretsz

    Ну если все драйвера в самом PHP есть, то смотри propel.ini и databases.yml

  • http://uadev.net Yuretsz

    Вообще с Propel надо разобраться как он работает и перейти на Doctrine.

    Propel надо знать только в случае, если будешь работать в Symfony-конторе. Там обычно много Propel-кода, с которым прийдется колупаться.

  • http://serg-smirnoff.com serg-smirnoff

    это 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) }

  • mkrentovskiy

    Не в теме, но предположу, что нема PEAR-а и его mysql-адаптера.

  • http://uadev.net Yuretsz

    Symfony без Pear отлично робе.

  • http://uadev.net Yuretsz

    Мне кажется не хватает pdo_mysql

  • http://serg-smirnoff.com serg-smirnoff

    причем я это все пытаюсь запихнуть в mysql все же предварительно выполняя

    $ php symfony configure:database «mysql:dbname=symfony_project;host=localhost» root mypassword

    и это прокатывает… а дальше затыкается на

    $ php symfony propel:insert-sql

  • http://serg-smirnoff.com serg-smirnoff

    там два варианта разворачивания
    с PEAR и грубо говоря из архива. так как PEAR нема, я решил из архива

    но все равно спотыкаюсь

    >Мне кажется не хватает pdo_mysql

    >PDO
    >pdo_sqlite

    упс… а его реально не хватает

    спасибо. буду пере собирать php ручками сейчас

  • http://serg-smirnoff.com serg-smirnoff

    Не. В symfony-конторе вряд ли. Если только потом все свои последующие буду на нем делать, если сейчас понравится

    А чем принципиально Doctrine от Propel отличается? Нагрузка?

  • http://uadev.net Yuretsz

    А чем принципиально Doctrine от Propel отличается?

    В Doctrine можно пользоваться DQL (Это такой универсальный SQL), а в Propel такого нет, можно только через задницу чистый SQL заряжать.

    В Doctrine можно легко выбирать что получать на выходе ( вложенный массив или ORM объекты )

    Many-to-Many в Doctrine на порядок проще.

    Родная поддержка NestedSet

    Не нужно писать собственные методы Гидрации для получения объектов из сложных забросов.