2011-09-01 11 views
5

Tôi nhận được thông báo này báo lỗi khi tôi đang xây dựng mô hình:ATTR_AUTO_ACCESSOR_OVERRIDE

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

Vấn đề là, rằng tôi phải sử dụng tên lĩnh vực này, bởi vì nó là trong một bảng được tạo ra và được sử dụng bởi VirtueMart. Bí danh cũng không hoạt động.

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

Vì vậy, tôi có thể làm gì? Tôi có thể tắt số ATTR_AUTO_ACCESSOR_OVERRIDE hoặc tôi có gặp vấn đề với điều đó không. Trong trường hợp tôi có thể, làm thế nào tôi có thể làm điều đó?

Có thể có vấn đề với việc tắt ATTR_AUTO_ACCESSOR_OVERRIDE không? Và nếu có một (hoặc nhiều hơn), nó sẽ là gì?

Tôi biết ơn vì lời khuyên nào!


Thông tin bổ sung:

Định nghĩa trong 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 } 
+0

Phiên bản giáo lý bạn đang sử dụng, 1,2 hoặc 2,0? Ngoài ra, định nghĩa thực thể có thể hữu ích. – J0HN

+0

Tôi đang sử dụng học thuyết 1.2. – Andreas

Trả lời

4

tôi đã tìm thấy giải pháp tốt hơn, đặt điều này trong lớp ProjectConfiguration:

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

Hoạt động tự động phát hiện bối cảnh CLI và chuyển đổi ATTR thích đi.

+0

Điều này thực sự gọn gàng. Chúc mừng! – Andreas

+0

Tôi đã viết về điều này trên blog của mình: http://blog.kowalczyk.cc/2011/09/16/symfony-blad-when-using-the-attribute-attr_auto_accessor_override-you-cannot-use-the-field-name /. Đó là bằng tiếng Ba Lan, nhưng tôi hy vọng rằng bạn sẽ quản lý để đọc nó với Google Translate. :) –

1

cuối cùng tôi đã tìm thấy một giải pháp cho việc này:

  • chuyển ATTR_AUTO_ACCESSOR_OVERRIDE tạm thời tắt trong 'mySymfonyFolder/lib/vendor/symfony/lib/plugins // sfDoctrinePlugin/config/sfDoctrineConfiguration.class.php'
  • tạo các lớp
  • chuyển đổi nó trên một lần nữa

Nếu bạn muốn thiết lập các lĩnh vực trong các mã, bạn phải làm:

  • switch ATTR_AUTO_ACCESSOR_OVERRIDE đầu với -> setAttribute (Học thuyết :: ATTR_AUTO_ACCESSOR_OVERRIDE, false);
  • thực hiện cài đặt
  • bật lại bằng -> setAttribute (Doctrine :: ATTR_AUTO_ACCESSOR_OVERRIDE, true);