ATTR_AUTO_ACCESSOR_OVERRIDE - PullRequest
       7

ATTR_AUTO_ACCESSOR_OVERRIDE

5 голосов
/ 01 сентября 2011

Я получаю это сообщение об ошибке при построении модели:

When using the attribute ATTR_AUTO_ACCESSOR_OVERRIDE you cannot use the field name "attribute" ...

Проблема заключается в том, что мне нужно использовать это имя поля, потому что оно находится в таблице, которая создается и используется virtuemart,Псевдоним также не работает.

product_attribute: { name: product_attribute as attribute,  type: clob(16777777) }

Итак, что я могу сделать?Могу ли я выключить ATTR_AUTO_ACCESSOR_OVERRIDE или у меня проблемы с этим.Если я могу, как я могу это сделать?

Может ли быть проблема с выключением ATTR_AUTO_ACCESSOR_OVERRIDE?И если будет один (или более), что это будет?

Я благодарен за любой совет!


Дополнительная информация:

Определение в BaseJosVmProduct:@property clob $product_attribute

schema.yml:

JosVmProduct:
  columns:
    product_id:                     { type: int, notnull: true, unique: true, primary: true, autoincrement: true }
    vendor_id:                      { type: int, notnull: true, default: 0 }
    product_parent_id:              { type: int, notnull: true, default: 0 }
    product_sku:                    { type: string(64), , notnull: true, default: '' }
    product_s_desc:                 { type: string(255), default: null }
    product_desc:                   { type: clob(16777777) }
    product_thumb_image:            { type: string(255), default: null }
    product_full_image:             { type: string(255), default: null }
    product_publish:                { type: string(1), default: null }
    product_weight:                 { type: decimal(10), scale: 4, default: null }
    product_weight_uom:             { type: string(32), default: 'pounds.' }
    product_length:                 { type: decimal(10), scale: 4, default: null }
    product_width:                  { type: decimal(10), scale: 4, default: null }
    product_height:                 { type: decimal(10), scale: 4, default: null }
    product_lwh_uom:                { type: string(32), default: 'inches' }
    product_url:                    { type: string(255), default: null }
    product_in_stock:               { type: int, default: null }
    product_available_date:         { type: int, default: null }
    product_availability:           { type: string(56), notnull: true, default: '' }
    product_special:                { type: string(1), default: null }
    product_discount_id:            { type: int, default: null }
    ship_code_id:                   { type: int, default: null }
    cdate:                          { type: int, default: null }
    mdate:                          { type: int, default: null }
    product_name:                   { type: string(64), default: null }
    product_sales:                  { type: int, notnull: true, default 0 }
    product_attribute:              { name: product_attribute as attribute, type: clob(16777777) }
    custom_attribute:               { type: clob(16777777), notnull: true }
    product_tax_id:                 { type: int(2), notnull: true, default: '0' }
    product_unit:                   { type: string(32), default: null }
    product_packaging:              { type: int, default: null }
    webinar_duration:               { type: string(50), default: null }

Ответы [ 2 ]

4 голосов
/ 17 сентября 2011

Я нашел лучшее решение, поместите его в класс ProjectConfiguration:

public function configureDoctrine()
        {
        $isCli = (php_sapi_name() == "cli");
        if(true == $isCli)
            {
            Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, false);
            }
        }

Работает автоматически, обнаруживая контекст CLI и выключая надлежащий ATTR.

1 голос
/ 02 сентября 2011

Я наконец нашел решение для этого:

  • временно выключить ATTR_AUTO_ACCESSOR_OVERRIDE в 'mySymfonyFolder / lib / vendor / symfony / lib / plugins // sfDoctrinePlugin / config / sfDoctrineConfiguration.class.php'
  • создать классы
  • включить его снова

Если вы хотите установить поле в коде, вы должны сделать:

  • выключить ATTR_AUTO_ACCESSOR_OVERRIDE с помощью -> setAttribute (Doctrine :: ATTR_AUTO_ACCESSOR_OVERRIDE, false);
  • выполнить настройку
  • включить его снова с помощью -> setAttribute (Doctrine :: ATTR_AUTO_ACCESSOR_OVERRIDE, true);
...