2008-10-20 37 views
16

Tôi đang tìm bản ghi Hoạt động của Ruby cho PHP. Một cái gì đó đơn giản đến mức tôi chỉ định nghĩa các trường của mình, mở rộng lớp ORM cơ sở và tôi nhận được các hoạt động ACID miễn phí. Tôi sẽ nhận được getters mặc định và setters mà không cần viết bất kỳ mã nào, nhưng ghi đè getter hoặc setter mặc định dễ dàng như khai báo nhận $ fieldName hoặc đặt $ fieldName functions với hành vi mà tôi muốn. Bản giao hưởng giúp bạn tạo khoảng 5 tệp cho mỗi đối tượng và tất cả các đối tượng được xác định luôn tải theo như tôi có thể biết. Một lựa chọn tốt hơn là gì? Tại sao nó tốt hơn? Bạn có thể đưa các ví dụ đơn giản vào câu trả lời của bạn không?Cách dễ nhất để sử dụng khung công tác ORM cho PHP là gì?

Học thuyết là một ORM khác mà tôi đã xem bên cạnh bản giao hưởng. Ngoài ra, bạn cũng cần tạo các tệp yaml mô tả cấu trúc dữ liệu của bạn. Cơ sở dữ liệu đã định nghĩa công cụ này. Điều gì sẽ chỉ đọc defs bảng của tôi mà không cần phải tạo và lưu trữ các tập tin cấu hình ở khắp mọi nơi?

+0

tôi đăng tải dưới đây nhưng có một giải pháp cho vấn đề học thuyết của mình. Chạy một ./doctrine generate-models-db hoặc ./doctrine generate-yaml-db đảo ngược kỹ sư cơ sở dữ liệu của bạn thành các tệp lớp và yaml tương ứng. – dcousineau

Trả lời

5

Cả hai CodeIgniter (http://codeigniter.com/user_guide/database/active_record.html) và nhánh chỉ có PHP5 của nó Kohana (http://docs.kohanaphp.com/libraries/orm) chứa các triển khai của mẫu ActiveRecord.

+0

Kohana có vẻ là điều tôi đang tìm kiếm. Bản ghi hoạt động của Zend không thực hiện bất kỳ sự phụ thuộc lẫn nhau nào, và trên thực tế chỉ cung cấp cho bạn các mảng trở lại, không phải các lớp mà bạn có thể hoạt động, hoặc mở rộng chức năng của. Vì vậy, Kahana có vẻ là người chiến thắng cho đến nay. – Zak

+0

Zak, điều đó không đúng. Các phương thức của Zend Table trả về các đối tượng kiểu Zend_Db_Table_Row hoặc Zend_Db_Table_Rowset. Bạn có thể mở rộng các lớp này. Bạn có thể khai báo các phụ thuộc vào các bảng khác trong các lớp Zend_Db_Table của bạn. Nhưng bất cứ điều gì - tôi chắc chắn Kahana sẽ phù hợp với nhu cầu của bạn. –

+0

Cảm ơn bạn đã cập nhật. Tôi đã xác nhận bạn đã đúng với nội dung của Zend. (Như tôi từng nghi ngờ;) – Zak

4

Zend_Db_TableZend_Db_Table_Row khá tốt với những gì bạn mô tả. Bạn không cần bất kỳ tệp cấu hình nào, hầu hết siêu dữ liệu được "phát hiện" từ chính cơ sở dữ liệu.

Về mặt kỹ thuật, các lớp này không triển khai mẫu ActiveRecord. Thay vào đó, họ triển khai các mẫu Table Data GatewayRow Data Gateway. Cùng với nhau, chúng cung cấp giá trị tương tự như ActiveRecord và theo một số cách linh hoạt hơn ActiveRecord.

Nhưng như với bất kỳ ORM nào, chắc chắn có một số truy vấn và hoạt động SQL mà bạn không thể thực hiện thông qua giao diện OO. Không có ORM nào có thể phục vụ như là một điểm mua sắm.

Lưu ý: Tôi đã làm việc trên dự án Zend Framework trong hơn một năm, đặc biệt là trên thành phần Zend_Db. Nhưng tôi không làm việc cho họ nữa.

5

Tôi đã tạo của riêng mình mà không có sự sưng lên. (Mặc dù tôi cần cập nhật các nguồn trên trang web của mình)

Tôi đã tạo nó với các điểm chính xác mà bạn đề cập: không có hàng tá tệp xml, không có khung lớn, chỉ đơn giản là các nhà xây dựng với cơ sở dữ liệu công cụ CRUD/Find/Join cơ bản. Đối với hầu hết những thứ tôi làm, tôi thậm chí không cần phải viết các truy vấn tùy chỉnh.

Tôi đã viết tất cả điều này trước đây trên my site cũng, đảm bảo xem basic examples để có ý tưởng về nó.

Phiên bản tiếp theo tôi sẽ phát hành đi kèm với một dòng tham gia làm việc trên tham gia (để đi bộ 'đường dẫn' thông qua cơ sở dữ liệu của bạn), cài đặt cơ sở dữ liệu ini, hỗ trợ cơ sở dữ liệu chéo, trừu tượng cơ sở dữ liệu siêu đơn giản và logger tiêu chuẩn quay trở lại SQLite nếu cơ sở dữ liệu của bạn bị hỏng.

Chỉ cần hét lên nếu bạn quan tâm đến nội dung cập nhật, tôi sẽ vội vàng.

Ồ vâng và đừng quên, cũng có bộ tạo hình quảng cáo hình ảnh đẹp được gọi là Pork.Generator. Nó cố gắng để phân tích cấu trúc cơ sở dữ liệu của bạn và tìm 1: 1 1: nhiều và nhiều: nhiều mối quan hệ, và có thể tự động tạo ra các lớp học cho bạn :-) relations found in database http://www.schizofreend.nl/images/demo3.jpg

11

Tôi là một fan hâm mộ lớn của Doctrine mà là một đầy đủ ORM đặc trưng sẽ thay thế Propel làm ORM mặc định của Symfony.

Nó có nội dung ORM cơ bản bạn mong đợi cùng với trình tạo truy vấn đầy đủ tính năng mà tôi thấy tuyệt vời.

Nó đi kèm với bộ công cụ dòng lệnh đầy đủ để quản lý cơ sở dữ liệu của bạn. Ví dụ, bạn có thể tạo các lược đồ và đồ đạc trong YAML, để Doctrine tạo các lớp dựa trên lược đồ của bạn, tạo cơ sở dữ liệu, tạo lược đồ dựa trên các mô hình, sau đó điền vào cơ sở dữ liệu với các đồ đạc của bạn với ./doctrine build-all-reload.

Nó cũng bao gồm hỗ trợ di chuyển cơ sở dữ liệu và recently updated di chuyển để tự động phân biệt và tạo mô hình di chuyển của bạn.

Theo khiếu nại học thuyết của bạn, bạn có thể chạy lệnh ./doctrine generate-models-db hoặc ./doctrine generate-yaml-db để tự động tạo mô hình và tệp yaml tương ứng từ thiết lập cơ sở dữ liệu hiện tại của bạn.

Các chất niceties khác bao gồm "Behaviors" giúp cuộc sống dễ dàng hơn nhiều khi thực hiện một số hành vi nhất định, tốt trong lược đồ của bạn. Ví dụ: bạn có thể thêm hành vi "Dấu thời gian" vào tệp lớp học của mình. Doctine tự động thêm cột 'created_at' và 'updated_at', điền chúng và mỗi $object->save() bạn chạy tự động cập nhật cột 'updated_at'. Các hành vi phức tạp hơn bao gồm i18n, phiên bản bảng và cây (mặc dù chỉ thực sự là NestedSet).

Cá nhân tôi đã vô cùng say mê với Doctrine và say mê về nó mọi cơ hội tôi nhận được.

1

Kiểm tra khung duy trì. Mặc dù tôi thích tạo mã trên ActiveRecord (phản chiếu thời gian chạy), tôi đã tìm thấy khung bảo trì dễ sử dụng đặc biệt là về các tính năng ORM.

http://framework.maintainable.com/mvc/3_model.php#c3.7

Nếu bạn muốn một khung dựa trên việc tạo mã, hãy thử QCodo. Dù dcousineau nói gì với Doctrine, tôi có thể nói cho Qcodo. Đây là một khung công tác được định hướng sự kiện bắt chước .NET/Delphi. Tuy nhiên, bạn chỉ có thể tạo tính năng tạo mã và tìm cách tách liên kết được tạo ra khỏi phần còn lại của khung công tác. Do đó, bạn có thể nhúng tạo ra được phân loại trong các khung công tác khác.

1

Một tùy chọn khác sau khi triển khai Ruby DataMapper là phpDataMapper. Nó rõ ràng là một Mapper dữ liệu thay vì một ActiveRecord :).

9

Tôi sử dụng một lớp ít được biết đến gọi là redbean. bạn có thể tìm thấy ở đây: http://www.redbeanphp.com. của nó hoàn toàn độc đáo theo nghĩa là nó chỉ tạo ra các cột bảng và lập chỉ mục tất cả bởi chính nó mà không có bất kỳ tập tin cấu hình nào cả. Tôi tìm thấy nó là một lần tiết kiệm rất lớn!

1

Tôi muốn giới thiệu Doctrine with Symfony. Mặc dù có nhiều điều để tìm hiểu bạn sẽ tìm thấy nó có các tính năng bạn sẽ cần một khi dự án phát triển (CRUD, khuôn khổ Form, Record Templates, DQL, hỗ trợ Plugin, Behaviors). Cả hai dự án đều có cộng đồng rất tích cực và bạn không nên tìm thấy chính mình trong một kết thúc chết, bởi vì hầu hết các câu hỏi của bạn đã được trả lời trong các hướng dẫn chính thức hoặc trong một diễn đàn.

Nếu bạn không thích định nghĩa cơ sở dữ liệu trong YAML, bạn luôn có thể sử dụng ORM Designer hoặc MySQL Workbench.

0

Tôi khuyên bạn nên QCubed. Đó là một khung công tác ORM chỉ có PHP5 cực kỳ mạnh mẽ tập trung vào việc tạo mã, dàn dựng giao diện người dùng và phát triển ứng dụng nhanh chóng.Hãy xem các video đào tạo: http://qcu.be/content/video-screencasts

0

http://dbphp.net

Ưu

  • Tạo/Sửa đổi cơ sở dữ liệu/bảng/lĩnh vực/nhiều bảng/lĩnh vực thuộc tính một cách nhanh chóng.
  • Không cần cài đặt.
  • Không có cấu hình nào cả.
  • Chỉ cần bao gồm thư viện và chỉ định tham số liên kết db để bắt đầu công việc.
  • Nó đã được xây dựng trong hỗ trợ bản địa hóa.
  • Có nhiều cấp bộ nhớ cache khác nhau và cho phép mở rộng bộ nhớ cache.
  • Nó hoạt động với nhiều kết nối cơ sở dữ liệu khác nhau cùng một lúc.
  • Nó có thể tạo mối quan hệ giữa các bảng nằm trong các máy chủ cơ sở dữ liệu khác.
  • Nó trích xuất thuộc tính bảng/trường bằng cách sử dụng các nhận xét về lớp và biến doc.

Nhược điểm

  • Nó chỉ làm việc với các đối tượng. tức là bạn phải xác định lớp học và có thể hiện của lớp học để tiết kiệm tải hoặc v.v.
  • Nó không có trang web nhưng có thư mục mẫu.
0

Tôi thích Idiorm and Paris và sử dụng cả hai trên các dự án nhỏ. Idiorm là ORM thực tế, trong khi Paris là triển khai bản ghi hoạt động. Bạn có thể sử dụng một trong hai bạn muốn.

Có một cũng là một ngã ba gọi Granada, được xây dựng trên Idiorm và Paris, và thêm hỗ trợ như tải háo hức, vv

0

Object mapper quan hệ (ORM) cho PHP mà ngồi trên đỉnh của một trừu tượng cơ sở dữ liệu mạnh mẽ lớp (DBAL). Một trong những tính năng chính của nó là tùy chọn để viết các truy vấn cơ sở dữ liệu trong một phương ngữ độc quyền hướng đối tượng SQL được gọi là Doctrine Query Language (DQL), lấy cảm hứng từ Hibernates HQL. Điều này cung cấp cho các nhà phát triển một giải pháp thay thế mạnh mẽ cho SQL duy trì tính linh hoạt mà không yêu cầu sao chép mã không cần thiết.

Các vấn đề liên quan