2010-10-28 44 views
5

Tôi đã mở rộng bảng trang và bây giờ tôi muốn sử dụng một số dữ liệu trong đối tượng miền được gọi là "Thẻ".
Vì vậy, tôi đã cố gắng sau trong /Configuration/TypoScript/setup.txt:ánh xạ extbase tới bảng hiện có không hoạt động

plugin.myextension.persistence.classes.Tx_myextension_Domain_Model_Tag { 
    mapping { 
     tableName = pages 
     recordType = Tx_myextension_Domain_Model_Tag 
     columns { 
      tx_myextension_tag_name.mapOnProperty = name 
      uid.mapOnProperty = id 
     } 
    } 
} 

Nhưng Dường như phần mở rộng cố gắng truy cập vào bảng Tx_myextension_Domain_Model_Tag (mà không tồn tại)

Đây là lỗi tôi nhận được:

Tx_Extbase_Persistence_Storage_Exception_SqlError`

Bảng 'tx_myextension_domain_model_tag' không tồn tại: SELECT tx_myextension_domain_model_tag. * F ROM tx_myextension_domain_model_tag WHERE tx_myextension_domain_model_tag.id = '24' LIMIT 1

Tôi đã làm gì sai?

+0

Các bạn đã thử xóa dòng 'RECORDTYPE = Tx_myextension_Domain_Model_Tag'? – Mateng

Trả lời

0

Tx_myextension_Domain_Model_Tag là tên đối tượng của bạn phải không? Nhưng tôi đoán đây không phải là tên của bảng bạn đang cố truy cập. Vì vậy, tôi đoán là tên bạn đang cung cấp vào giá trị "tableName" là sai. "Trang" chứa gì?

+0

Đây là tên của lớp học, bạn nói đúng. Bảng "trang" là bảng typo3-trang, vì vậy nó chứa tất cả các trang của typo3 (cộng với các cột tôi đã thêm cho phần mở rộng là [..] tag_name) – hering

+0

Tôi không thấy cách bạn chỉ định ánh xạ trong mẫu bạn đang cung cấp. Nó chỉ nói rằng mô hình persistence của bạn nhận thức được rằng lớp Tx_myextension_Domain_Model_Tag được ánh xạ, nhưng bạn có chỉ định rõ ràng rằng lớp này được ánh xạ tới bảng bạn muốn không? Nếu không, lỗi của bạn là bình thường vì nó sẽ lấy tên của lớp như tên của bảng (như bạn đã nói, không tồn tại). – Hal

+0

Nhưng trong ánh xạ, tôi đã chỉ định tên của bảng ('tableName = pages'). Có lẽ tôi sai với cú pháp, nhưng tôi nghĩ đoạn mã của tôi nên làm những gì tôi mong đợi: Ánh xạ lớp Domain tới bảng trang và ngăn chặn extbase cố gắng truy cập vào một bảng có tên như lớp miền. – hering

2

bạn đã thử "config.tx_extbase" thay vì "plugin.myextension" chưa?

Something như

config.tx_extbase.persistence.classes.Tx_MyExtension_Domain_Model_Tag.mapping.tableName = pages 

công trình đối với tôi.

+0

hoạt động cho tôi (tm) – pduersteler

+0

Không hoạt động đối với tôi. Trong phần mở rộng của tôi, tôi có một Mô hình miền 'Tx_Extname_Domain_Model_Member' mở rộng' Tx_Extbase_Domain_Model_FrontendUser'. Tôi ánh xạ mô hình của tôi để fe_users bởi 'config.tx_extbase.persistence.classesTx_Extname_Domain_Model_Member.mapping.tableName = fe_users' nhưng khi tôi cố gắng lưu một bản ghi trong BE, tôi nhận được lỗi' Lỗi SQL: 'Bảng' usrdb_typo3.tx_extname_domain_model_member 'doesn' t tồn tại''. Do đó tôi cho rằng ánh xạ không hoạt động đúng. Tuy nhiên nó được hiển thị im trình duyệt đối tượng TS của tôi. – Martin

3

Đừng quên đưa mẫu bản mẫu tiện ích của bạn vào mẫu của bạn (mẫu> chỉnh sửa toàn bộ mẫu> bao gồm mẫu tĩnh), nếu không tệp setup.txt của bạn không được đánh giá.

0

Bạn đã chỉ định các trang riêng lẻ làm bản ghi Tx_myextension_Domain_Model_Tag? Đó là nghĩa vụ phải đi vào trường doctype của bảng trang (do đó bạn sẽ cần phải thay đổi kiểu dữ liệu mysql của trường đó. Nếu không, Extbase không biết rằng trang cụ thể này là bản ghi extbase và không phải là trang thông thường. Xem thêm về thừa kế bảng đơn (STI) trong Extbase: http://pascal-jungblut.com/blog/blog-post/2010/11/06/single-table-inheritance-in-extbase.html

+0

Liên kết tới Pascal 404's – Mateng

2

Để kiểm tra loại Record (s) được chấp nhận sử dụng Mô-đun cấu hình trong BE, trong phần $ TCA tìm bảng của bạn ([trang] trong trường hợp này) và kiểm tra loại cột (... [ctrl] [loại] - cho các trang là 'doktype', quyết định xem bản ghi trang là trang tiêu chuẩn hay sysfolder, v.v.)

Cột này nhỏ gọn (3) trong cơ sở dữ liệu, vì vậy bạn có thể không viết v alue 'Tx_myextension_Domain_Model_Tag' cho nó. Tạo trong doktype ext mới của bạn được xác định theo số và thiết lập recordType cho nó.

Tùy chọn bạn chỉ có thể xóa recordType khỏi cấu hình lập bản đồ nếu loại trang không quan trọng đối với bạn.

0

bạn có thực hiện việc này trong cuộc gọi typo3 với eID không? ở đây một số cấu hình không được tải ..

nếu có, hãy thử nếu tải tất cả các cấu hình giải quyết vấn đề:

... 
    $GLOBALS['TSFE'] = \t3lib_div::makeInstance('tslib_fe', $TYPO3_CONF_VARS, $_GET["id"], 0, true); 
    //$GLOBALS['TSFE'] = new $temp_TSFEclassName(); 
    $GLOBALS['TSFE']->connectToDB(); 
    $GLOBALS['TSFE']->initFEuser(); 
    $GLOBALS['TSFE']->determineId(); 
    $GLOBALS['TSFE']->getCompressedTCarray(); 
    $GLOBALS['TSFE']->initTemplate(); 
    $GLOBALS['TSFE']->getConfigArray(); 
    ... 
0

Chăm sóc quy ước đặt tên thích hợp về FE-Plugins:

plugin.tx_myextension 
Các vấn đề liên quan