2010-02-17 12 views
6

Tôi đang sử dụng Symfony 1.4 và Doctrine.Cách "sắp xếp theo" một sfWidgetFormDoctrineChoice trong Trình tạo quản trị

Giả sử tôi có 2 lớp: Thương hiệu và Sản phẩm.

Khi tôi tạo sản phẩm mới trong quản trị viên dựa trên Quản trị viên, tôi muốn chọn một thương hiệu từ danh sách thả xuống. Trình tạo quản trị đang làm điều đó cho tôi, tự động tạo một sfWidgetFormDoctrineChoice.

Vấn đề là các thương hiệu được sắp xếp theo id. Tôi muốn chúng được sắp xếp theo trường "nhãn" của chúng.

Để làm được điều mà tôi đã làm như sau trong lớp ProductForm tôi:

$this->widgetSchema['brand_id']->addOption('order_by','label'); 

Nhưng tôi nhận được lỗi sau:

Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a' at line 1. Failing Query: "SELECT b.id AS b__id, b.external_id AS b__external_id, b.label AS b__label, b.created_at AS b__created_at, b.updated_at AS b__updated_at FROM brand b ORDER BY l a"

Trình tự do tuyên bố thực sự kỳ lạ. Tôi không hiểu tại sao nó có vẻ như cắt tên của mệnh lệnh.

Chỉnh sửa: Dường như tùy chọn 'order_by' đang mong đợi một mảng làm tham số thứ hai. Giá trị nào nó mong đợi?

Trả lời

18

Tôi đã không thử giải pháp của benlumley kể từ khi ông trả lời ngay khi tôi tìm thấy giải pháp của tôi. Nó có vẻ tẻ nhạt hơn những gì tôi đã làm.

Tôi đã xem mã nguồn để tìm hiểu xem tất cả điều này hoạt động như thế nào. Nó chỉ ra các "order_by" tùy chọn cần một mảng xác định lĩnh vực mà ai muốn đặt hàng các kết quả và một trong hai 'asc' hoặc 'desc':

$this->widgetSchema['product_id']->addOption('order_by',array('label','asc')); 

Nó hoạt động như một nét duyên dáng.

+0

Tôi hoàn toàn hiểu sai câu hỏi của bạn! Mỏ là đặt hàng trang danh sách trên trình tạo quản trị bởi một trường trên bảng ngoài - không phải thứ bạn muốn! – benlumley

2

Bạn nên có một cái nhìn ở đây:

http://trac.symfony-project.org/wiki/HowtoSortAdminGeneratorListByForeignTableName

của nó dựa tắt của một phiên bản cũ của symfony, vì vậy nghi ngờ plugin nó liên kết sẽ không hoạt động. Nhưng tôi nghĩ phương pháp này vẫn phải là âm thanh - mấu chốt của nó là bạn phải thêm phương pháp vào hành động để chặn và sửa đổi việc xử lý mặc định sắp xếp theo trường cụ thể này:

Về học thuyết, bạn cần xác định/ghi đè addSortQuery, cho propel, addSortCriteria.

Đề nghị bạn hãy xem trong thư mục bộ nhớ cache để xem các lớp được tạo tự động trông như thế nào để hiểu cách hoạt động của lớp.

+1

điều này đã giúp tôi anyway: P, cảm ơn. – grilix