Doctrine ORM và Laravel 5

Doctrine ORM và Laravel 5
Là một nhà tăng trưởng PHP, bạn hoàn toàn có thể đã gặp thuật ngữ ORM. ORM là giải pháp thao tác với những database, tương tự như như cách bạn sử dụng những class và object. Nếu bạn đã điều tra và nghiên cứu sâu hơn về những ứng dụng web được phong cách thiết kế và thiết kế xây dựng như thế nào, sau khi mày mò ORM của họ, bạn sẽ tìm thấy hai pattern nổi tiếng : Active Record và Data Mapper .
Active Record đề cập đến việc ánh xạ một object tới một row trong database. Thật vậy, mỗi row trong database được gán thành một object. Khi bạn lấy một row từ database, bạn hoàn toàn có thể update, xóa hoặc lưu bằng chính object đó. Đó là cách Eloquent và Paris hoạt động giải trí và được thực thi trong Ruby on Rails. Mặt khác, Data Mapper là một layer của ứng dụng giúp tách những object từ bộ nhớ trong ( in-memory ) ra khỏi database. Với Data Mapper, những object trong bộ nhớ thậm chí còn không cần biết đến sự sống sót của database. Chúng không cần interface code cho SQL hoặc kiến ​ ​ thức về database schema. Một giải pháp như vậy gọi là Doctrine. Doctrine ORM

Doctrine là gì?

Doctrine là một ORM triển khai một pattern là Data Mapper và cho phép bạn tách biết riêng các business rules của ứng dụng khỏi persistence layer của database.

Bạn đang đọc: Doctrine ORM và Laravel 5

Một số ưu điểm mà tôi đã phát hiện khi sử dụng Doctrine với Laravel :

  • Nhanh hơn và dễ sử dụng hơn.
  • Entity (entity) chỉ là các object (object) PHP đơn giản.
  • Doctrine tiếp cận theo kiểu “code first”, vì vậy bạn có thể tạo các entity trước, sau đó tạo một database cho chúng một cách tự động. Trường hợp ngược lại cũng có thể, nhưng tôi không khuyến khích.
  • Hỗ trợ chú thích, XML và YAML cho schema.
  • DQL (thay thế cho SQL) tóm tắt các bảng của bạn.
  • Các sự kiện của Doctrine cho phép bạn dễ dàng kết nối vào các sự kiện database cụ thể và thực hiện một số hành động nhất định.
  • Các repository trung thành hơn với pattern repository.
  • Phương thức transactional write-behind cho phép Doctrine ít tương tác hơn với Database đến khi phương thức flush() được gọi.

Tất nhiên, Doctrine cũng có điểm yếu kém, nhưng lựa chọn ORM tương thích là tuỳ vào lập trình viên.

Doctrine DQL

DQL viết tắt từ Doctrine Query Language. DQL được cho phép bạn ngôn từ truy vấn object, có nghĩa là thay vì truy vấn relational ( quan hệ ) truyền thống lịch sử, bạn có những truy vấn ở dạng object. DQL được cho phép bạn viết những truy vấn database theo hướng object, rất hữu dụng khi bạn cần truy vấn database khi những phương pháp mặc định từ repository không hề ( hoặc khó ) đạt được. Mẫu truy vấn DQL :

Bộ lọc Doctrine

Doctrine được cho phép bạn số lượng giới hạn hiệu quả truy vấn bằng Filters. Ví dụ : hoàn toàn có thể bạn chỉ muốn chỉnh sửa thông tin người dùng đã đăng nhập hoặc bảo vệ tài liệu của người mua hiện tại được lấy được từ database. Filter là giải pháp tự động hóa để ghi nhớ những điều kiện kèm theo đơn cử cho tổng thể những truy vấn của bạn. Doctrine cung ứng những số lượng giới hạn cho mức độ SQL, vì thế không cần phải duy trì mệnh đề trong repository của dự án Bất Động Sản của bạn. Điều này giúp ngày càng tăng bảo mật thông tin và giúp code của bạn dễ đọc hơn. Hãy xem một ví dụ :

Như bạn có thể thấy trong User entity, kết quả của JoinColumn chỉ giới hạn trong các mục có điều kiện là WHERE user_id =: user_id.

Cài đặt Doctrine 2

Để thiết lập Doctrine, có một lựa chọn để kiểm soát và điều chỉnh tương thích với thông số kỹ thuật hiện tại của Laravel 5. Để thiết lập Doctrine 2 trong dự án Bất Động Sản Laravel, chạy lệnh sau đây :

Như thường lệ, package sẽ được thêm vào app/config.php, với tư cách service provider:

Alias cũng phải được định thông số kỹ thuật : Cuối cùng, chúng tôi xuất bản thông số kỹ thuật cho package với :

Doctrine không cần cấu hình database và sử dụng cấu hình Laravel hiện tại, nhưng nếu bạn muốn thay đổi nó, bạn nên thay đổi file cấu hình Doctrine trong Config/doctrine.php:

Đó là tổng thể cần làm !

Entity là gì?

“ Entity ” tham chiếu đến một object có danh tính riêng không liên quan gì đến nhau. Một entity phải có một identifier đơn cử và duy nhất xuyên thấu mạng lưới hệ thống, ví dụ điển hình như người mua hoặc sinh viên. Sẽ có những object khác, ví dụ điển hình như địa chỉ email, không phải là entity, mà là những value objects.

Hãy tạo một Post Entity App/Entity/Post.php:

Thuộc tính của class phải giống với các field trong bảng của database hoặc bạn có thể xác định chúng bằng chú thích @Colum ("name"="myfield").

Repository là gì?

Repository cho phép tổng thể code của bạn sử dụng những object mà không cần biết những object được lưu giữ như thế nào. Repository chứa toàn bộ những thông tin về persistence, gồm cả mapping từ table đến object. Điều này cung ứng một góc nhìn hướng đối tượng người tiêu dùng hơn của persistence layer và làm mapping code có tính đóng gói hơn ( encapsulated ).

Bây giờ là lúc tạo Repository trong App/Repository/PostRepo.php:

Doctrine EntityManager hoạt động như access point để quản lý hoàn toàn các entity của bạn. Sau đó, tạo ra Controller App/Http/Controllers/PostController.php:

View và Route giống như thông thường.

Tôi thích tạo ra Validator của riêng mình dựa trên class Validator của Laravel. Dưới đây là Validator App\Validation\PostValidator.php:

Tổng kết

Nếu trước đây bạn chưa từng thao tác với Doctrine 2, tôi kỳ vọng bài viết này mê hoặc và đủ thông tin. Laravel 5 không sử dụng Doctrine, nhưng như bạn hoàn toàn có thể thấy, có 1 số ít gói được cho phép tất cả chúng ta thuận tiện sử dụng thư viện này cùng với Laravel. Tôi đã tạo một ứng dụng blog đơn thuần với Laravel 5 và Doctrine ORM và kỳ vọng điều này hoàn toàn có thể giúp bạn tạo ứng dụng mà bạn mong ước. Tôi luôn đón chờ những góp ý từ bạn .

admin

Trả lời

Email của bạn sẽ không được hiển thị công khai.