Doctrine ORM Và Laravel 5

By Best Tài Chính

Có phải bạn đang tìm kiếm chủ đề về => Doctrine ORM Và Laravel 5 phải ko? Nếu đúng tương tự thì mời bạn xem nó ngay tại đây. Xem thêm các bài viết hay khác tại đây => Tin Tức

Là một nhà tăng trưởng PHP, bạn có thể đã bắt gặp thuật ngữ ORM. ORM là một phương thức làm việc với cơ sở dữ liệu, tương tự như cách bạn sử dụng các lớp và nhân vật. Nếu bạn đã nghiên cứu sâu hơn về cách các ứng dụng web được thiết kế và xây dựng, sau lúc khám phá ORM của chúng, bạn sẽ tìm thấy hai mẫu nổi tiếng: Active Record và Data Mapper.

Bản ghi Hoạt động nói đến tới việc ánh xạ một nhân vật vào một hàng trong cơ sở dữ liệu. Thật vậy, mỗi hàng trong cơ sở dữ liệu được gán một nhân vật. Lúc bạn thu được một hàng từ cơ sở dữ liệu, bạn có thể cập nhật, xóa hoặc lưu bằng chính nhân vật đó. Đó là cách hoạt động của Eloquent và Paris và được thực hiện trong Ruby on Rails.

Mặt khác, Data Mapper là một lớp ứng dụng giúp tách các nhân vật từ bộ nhớ trong khỏi cơ sở dữ liệu. Với Data Mapper, các nhân vật trong bộ nhớ thậm chí ko cần biết sự tồn tại của cơ sở dữ liệu. Họ ko cần mã giao diện cho SQL hoặc kiến ​​thức về sơ đồ cơ sở dữ liệu. Một trong những giải pháp tương tự được gọi là Thuyết giáo.

Giáo lý là gì?

Doctrine là một ORM triển khai một mẫu gọi là Data Mapper và cho phép bạn tách các quy tắc nghiệp vụ của ứng dụng khỏi lớp vững bền của cơ sở dữ liệu.

Một số ưu điểm nhưng tôi đã khám phá lúc sử dụng Doctrine với Laravel:

  • Nhanh hơn và dễ sử dụng hơn.
  • Các thực thể (entity) chỉ là các nhân vật PHP thuần túy.
  • Doctrine sử dụng cách tiếp cận “viết mã trước”, vì vậy bạn có thể tạo các thực thể trước, sau đó tự động tạo cơ sở dữ liệu cho chúng. Trái lại cũng được, nhưng mình ko khuyến khích.
  • Hỗ trợ chú thích, XML và YAML cho sơ đồ.
  • 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 cơ sở dữ liệu cụ thể và thực hiện các hành động nhất mực.
  • Các kho lưu trữ trung thành hơn với kho lưu trữ mẫu.
  • Phương thức ghi sau giao dịch cho phép Doctrine có ít tương tác hơn với Cơ sở dữ liệu cho tới lúc phương thức flush () được gọi.

Tất nhiên, Doctrine cũng có những mặt trái của nó, nhưng việc chọn ORM thích hợp là tùy thuộc vào người lập trình.

Giáo lý DQL

DQL là viết tắt của Doctrine Query Language. DQL cho phép bạn tiếng nói truy vấn nhân vật, có tức là thay vì các truy vấn quan hệ truyền thống, bạn có các truy vấn ở dạng nhân vật.

DQL cho phép bạn viết các truy vấn cơ sở dữ liệu hướng nhân vật, rất hữu ích lúc bạn cần truy vấn cơ sở dữ liệu lúc các phương thức mặc định từ kho lưu trữ ko thể (hoặc khó) đạt được.

Truy vấn DQL mẫu:

CHỌN b.id làm ItemId, b.title làm ItemTitle, b.url làm ItemUrl FROM AlirezaDomainIdentityEntitiesMenu u WHERE u.id =: id

Bộ lọc giáo lý

Doctrine cho phép bạn giới hạn kết quả truy vấn bằng cách sử dụng Bộ lọc. Ví dụ: có thể bạn chỉ muốn thay đổi thông tin người dùng đã đăng nhập hoặc đảm bảo dữ liệu người dùng hiện có được truy xuất từ ​​cơ sở dữ liệu. Bộ lọc là một giải pháp tự động để ghi nhớ các điều kiện cụ thể cho tất cả các truy vấn của bạn.

Doctrine hỗ trợ các giới hạn ở mức SQL, vì vậy ko cần phải duy trì mệnh đề trong kho dự án của bạn. Điều này làm tăng tính bảo mật và làm cho mã của bạn dễ đọc hơn.

Hãy xem một ví dụ:

/ ** * @ManyToOne (targetEntity = ”User”) * @JoinColumn (name = ”user_id”, referenceColumnName = ”id”) ** / private $ user;

Như bạn có thể thấy trong thực thể Người dùng, kết quả của JoinColumn được giới hạn cho các mục nhập với điều kiện WHERE user_id =: user_id.

Setup Doctrine 2

Để thiết đặt Doctrine, có một tùy chọn để điều chỉnh nó với cấu hình Laravel 5 hiện nay. Để thiết đặt Doctrine 2 trong một dự án Laravel, hãy chạy lệnh sau:

nhà soạn nhạc yêu cầu laravel-doct / bug

Như thường lệ, gói này sẽ được thêm vào app / config.php, với tư cách là một nhà hỗ trợ dịch vụ:

LaravelDoctrineORMDoctrineServiceProvider :: lớp,

Bí danh cũng phải được định cấu hình:

‘EntityManager’ => LaravelDoctrineORMFacadesEntityManager :: class

Cuối cùng, chúng tôi xuất bản cấu hình cho gói với:

nhà hỗ trợ nghệ thuật php: xuất bản -tag = “config”

Doctrine ko cần cấu hình cơ sở dữ liệu và sử dụng cấu hình Laravel hiện có, nhưng nếu bạn muốn thay đổi nó, bạn nên thay đổi tệp cấu hình Doctrine trong Config / doct.php:

‘nhà quản lý’ => [ ‘default’ => [ ‘dev’ => env(‘APP_DEBUG’), ‘meta’ => env(‘DOCTRINE_METADATA’, ‘annotations’), ‘connection’ => env(‘DB_CONNECTION’, ‘mysql’), ‘namespaces’ => [ ‘App’ ],

Đó là tất cả những gì phải làm!

Thực thể là gì?

“Thực thể” nói đến tới một nhân vật có tính danh riêng lẻ. Một thực thể phải có một số nhận dạng cụ thể và duy nhất trong toàn hệ thống, chẳng hạn như người dùng hoặc sinh viên. Sẽ có các nhân vật khác, chẳng hạn như địa chỉ email, ko phải là thực thể, nhưng là các nhân vật trị giá.

Hãy tạo một ứng dụng Post Entity / Entity / Post.php:

ko gian tên AppEntity; sử dụng DoctrineORMMMapping dưới dạng ORM; / ** * @ORMEntity * @ORMTable (name = ”posts”) * @ORMHasLifecycleCallbacks () * / class Bài đăng {/ ** * @var integer $ id * @ORMColumn (name = ”id”, type = ”integer” , unique = true, nullable = false) * @ORMId * @ORMGeneratedValue (strategy = ”AUTO”) * * / private $ id; / ** * @ORMColumn (type = “string”) * / private $ title; / ** * @ORMColumn (type = “text”) * / private $ body; public function __construct ($ input) {$ this-> setTitle ($ input[‘title’]); $ this-> setBody ($ input[‘body’]); } public function getId () {return $ this-> id; } public function getTitle () {return $ this-> title; } public function setTitle ($ title) {$ this-> title = $ title; } public function getBody () {return $ this-> body; } public function setBody ($ body) {$ this-> body = $ body; }}

Các tính chất của lớp phải giống với các trường trong bảng cơ sở dữ liệu hoặc bạn có thể xác định chúng bằng chú thích @Colum (“name” = “myfield”).

Kho lưu trữ là gì?

Kho lưu trữ cho phép tất cả mã của bạn sử dụng các nhân vật nhưng ko cần biết các nhân vật được lưu trữ như thế nào. Kho lưu trữ chứa tất cả thông tin về tính dai sức, bao gồm ánh xạ từ bảng sang nhân vật. Điều này hỗ trợ một cái nhìn hướng nhân vật hơn về lớp vững bền và làm cho mã ánh xạ được đóng gói hơn.

Hiện giờ đã tới lúc tạo Kho lưu trữ trong App / Repository / PostRepo.php:

ko gian tên AppRepository; sử dụng AppEntityPost; sử dụng DoctrineORMEntityManager; class PostRepo {/ ** * @var string * / private $ class = ‘AppEntityPost’; / ** * @var EntityManager * / private $ em; public function __construct (EntityManager $ em) {$ this-> em = $ em; } public function create (Post $ post) {$ this-> em-> stay ($ post); $ this-> em-> flush (); } cập nhật tác dụng công khai (Đăng $ post, $ data) {$ post-> setTitle ($ data[‘title’]); $ post-> setBody ($ data[‘body’]); $ this-> em-> stay ($ post); $ this-> em-> flush (); } public function PostOfId ($ id) {return $ this-> em-> getRepository ($ this-> class) -> findOneBy ([ ‘id’ => $id ]); } public function delete (Post $ post) {$ this-> em-> remove ($ post); $ this-> em-> flush (); } / ** * tạo Bài đăng * @return Bài đăng * / hàm private readyData ($ data) {return new Post ($ data); }}

Xem thêm thông tin hay:  Tiên Tri Trần Dần Là Ai

Doctrine EntityManager hoạt động như một điểm truy cập để quản lý hoàn toàn các thực thể của bạn. Sau đó tạo Controller App / Http / Controllers / PostController.php:

ko gian tên AppHttpControllers; sử dụng AppRepositoryPostRepo làm kho; sử dụng AppValidationPostValidator; class PostController mở rộng Controller {private $ repo; public function __construct (repo $ repo) {$ this-> repo = $ repo; } thay đổi hàm công khai ($ id = NULL) {return View (‘admin.index’) -> with ([‘data’ => $this->repo->postOfId($id)]); } public function editPost () {$ all = Input :: all (); $ validate = PostValidator :: validate ($ all); if (! $ validate-> pass ()) {return redirect () -> back () -> withInput () -> withErrors ($ validate); } $ Id = $ this-> repo-> postOfId ($ tất cả[‘id’]); if (! is_null ($ Id)) {$ this-> repo-> update ($ Id, $ all); Session :: flash (‘msg’, ‘edit thành công’); } else {$ this-> repo-> create ($ this-> repo-> perpare_data ($ all)); Phiên :: flash (‘msg’, ‘thêm thành công’); } return redirect () -> back (); } public function getve () {return View (‘admin.index’) -> with ([‘Data’ => $this->repo->retrieve()]); } public function delete () {$ id = Input :: get (‘id’); $ data = $ this-> repo-> postOfId ($ id); if (! is_null ($ data)) {$ this-> repo-> delete ($ data); Session :: flash (‘msg’, ‘operation Thành công’); return redirect () -> back (); } else {return redirect () -> back () -> withErrors (‘operationFails’); }}}

View và Route giống như tầm thường.

Tôi muốn tạo Trình xác thực của riêng mình dựa trên lớp Trình xác thực của Laravel. Đây là Trình xác thực AppValidationPostValidator.php:

ko gian tên AppValidation; sử dụng Trình xác thực; class PostValidator {public static function validate ($ input) Max:80}

tóm tắt

Nếu bạn chưa làm việc với Doctrine 2 trước đây, tôi kỳ vọng bài viết này thú vị và nhiều thông tin. Laravel 5 ko sử dụng Doctrine, nhưng như bạn thấy, có một số gói cho phép chúng ta dễ dàng sử dụng thư viện này liên kết với Laravel. Tôi đã tạo một ứng dụng blog đơn giản với Laravel 5 và Doctrine ORM và kỳ vọng điều này có thể giúp bạn tạo ứng dụng nhưng bạn mong muốn. Tôi luôn mong đợi những ý kiến ​​đóng góp của bạn.


Thông tin thêm

Doctrine ORM Và Laravel 5

Là một nhà tăng trưởng PHP, bạn có thể đã bắt gặp thuật ngữ ORM. ORM là một phương thức làm việc với cơ sở dữ liệu, tương tự như cách bạn sử dụng các lớp và nhân vật. Nếu bạn đã nghiên cứu sâu hơn về cách các ứng dụng web được thiết kế và xây dựng, sau lúc khám phá ORM của chúng, bạn sẽ tìm thấy hai mẫu nổi tiếng: Active Record và Data Mapper.

Bản ghi Hoạt động nói đến tới việc ánh xạ một nhân vật vào một hàng trong cơ sở dữ liệu. Thật vậy, mỗi hàng trong cơ sở dữ liệu được gán một nhân vật. Lúc bạn thu được một hàng từ cơ sở dữ liệu, bạn có thể cập nhật, xóa hoặc lưu bằng chính nhân vật đó. Đó là cách hoạt động của Eloquent và Paris và được thực hiện trong Ruby on Rails.

Mặt khác, Data Mapper là một lớp ứng dụng giúp tách các nhân vật từ bộ nhớ trong khỏi cơ sở dữ liệu. Với Data Mapper, các nhân vật trong bộ nhớ thậm chí ko cần biết sự tồn tại của cơ sở dữ liệu. Họ ko cần mã giao diện cho SQL hoặc kiến ​​thức về sơ đồ cơ sở dữ liệu. Một trong những giải pháp tương tự được gọi là Thuyết giáo.

Giáo lý là gì?

Doctrine là một ORM triển khai một mẫu gọi là Data Mapper và cho phép bạn tách các quy tắc nghiệp vụ của ứng dụng khỏi lớp vững bền của cơ sở dữ liệu.

Một số ưu điểm nhưng tôi đã khám phá lúc sử dụng Doctrine với Laravel:

  • Nhanh hơn và dễ sử dụng hơn.
  • Các thực thể (entity) chỉ là các nhân vật PHP thuần túy.
  • Doctrine sử dụng cách tiếp cận “viết mã trước”, vì vậy bạn có thể tạo các thực thể trước, sau đó tự động tạo cơ sở dữ liệu cho chúng. Trái lại cũng được, nhưng mình ko khuyến khích.
  • Hỗ trợ chú thích, XML và YAML cho sơ đồ.
  • 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 cơ sở dữ liệu cụ thể và thực hiện các hành động nhất mực.
  • Các kho lưu trữ trung thành hơn với kho lưu trữ mẫu.
  • Phương thức ghi sau giao dịch cho phép Doctrine có ít tương tác hơn với Cơ sở dữ liệu cho tới lúc phương thức flush () được gọi.

Tất nhiên, Doctrine cũng có những mặt trái của nó, nhưng việc chọn ORM thích hợp là tùy thuộc vào người lập trình.

Giáo lý DQL

DQL là viết tắt của Doctrine Query Language. DQL cho phép bạn tiếng nói truy vấn nhân vật, có tức là thay vì các truy vấn quan hệ truyền thống, bạn có các truy vấn ở dạng nhân vật.

DQL cho phép bạn viết các truy vấn cơ sở dữ liệu hướng nhân vật, rất hữu ích lúc bạn cần truy vấn cơ sở dữ liệu lúc các phương thức mặc định từ kho lưu trữ ko thể (hoặc khó) đạt được.

Truy vấn DQL mẫu:

CHỌN b.id làm ItemId, b.title làm ItemTitle, b.url làm ItemUrl FROM AlirezaDomainIdentityEntitiesMenu u WHERE u.id =: id

Bộ lọc giáo lý

Doctrine cho phép bạn giới hạn kết quả truy vấn bằng cách sử dụng Bộ lọc. Ví dụ: có thể bạn chỉ muốn thay đổi thông tin người dùng đã đăng nhập hoặc đảm bảo dữ liệu người dùng hiện có được truy xuất từ ​​cơ sở dữ liệu. Bộ lọc là một giải pháp tự động để ghi nhớ các điều kiện cụ thể cho tất cả các truy vấn của bạn.

Doctrine hỗ trợ các giới hạn ở mức SQL, vì vậy ko cần phải duy trì mệnh đề trong kho dự án của bạn. Điều này làm tăng tính bảo mật và làm cho mã của bạn dễ đọc hơn.

Hãy xem một ví dụ:

/ ** * @ManyToOne (targetEntity = ”User”) * @JoinColumn (name = ”user_id”, referenceColumnName = ”id”) ** / private $ user;

Như bạn có thể thấy trong thực thể Người dùng, kết quả của JoinColumn được giới hạn cho các mục nhập với điều kiện WHERE user_id =: user_id.

Setup Doctrine 2

Để thiết đặt Doctrine, có một tùy chọn để điều chỉnh nó với cấu hình Laravel 5 hiện nay. Để thiết đặt Doctrine 2 trong một dự án Laravel, hãy chạy lệnh sau:

nhà soạn nhạc yêu cầu laravel-doct / bug

Như thường lệ, gói này sẽ được thêm vào app / config.php, với tư cách là một nhà hỗ trợ dịch vụ:

LaravelDoctrineORMDoctrineServiceProvider :: lớp,

Bí danh cũng phải được định cấu hình:

'EntityManager' => LaravelDoctrineORMFacadesEntityManager :: class

Cuối cùng, chúng tôi xuất bản cấu hình cho gói với:

nhà hỗ trợ nghệ thuật php: xuất bản -tag = "config"

Doctrine ko cần cấu hình cơ sở dữ liệu và sử dụng cấu hình Laravel hiện có, nhưng nếu bạn muốn thay đổi nó, bạn nên thay đổi tệp cấu hình Doctrine trong Config / doct.php:

'nhà quản lý' => [ ‘default’ => [ ‘dev’ => env(‘APP_DEBUG’), ‘meta’ => env(‘DOCTRINE_METADATA’, ‘annotations’), ‘connection’ => env(‘DB_CONNECTION’, ‘mysql’), ‘namespaces’ => [ ‘App’ ],

Đó là tất cả những gì phải làm!

Thực thể là gì?

“Thực thể” nói đến tới một nhân vật có tính danh riêng lẻ. Một thực thể phải có một số nhận dạng cụ thể và duy nhất trong toàn hệ thống, chẳng hạn như người dùng hoặc sinh viên. Sẽ có các nhân vật khác, chẳng hạn như địa chỉ email, ko phải là thực thể, nhưng là các nhân vật trị giá.

Hãy tạo một ứng dụng Post Entity / Entity / Post.php:

ko gian tên AppEntity; sử dụng DoctrineORMMMapping dưới dạng ORM; / ** * @ORMEntity * @ORMTable (name = ”posts”) * @ORMHasLifecycleCallbacks () * / class Bài đăng {/ ** * @var integer $ id * @ORMColumn (name = ”id”, type = ”integer” , unique = true, nullable = false) * @ORMId * @ORMGeneratedValue (strategy = ”AUTO”) * * / private $ id; / ** * @ORMColumn (type = "string") * / private $ title; / ** * @ORMColumn (type = "text") * / private $ body; public function __construct ($ input) {$ this-> setTitle ($ input[‘title’]); $ this-> setBody ($ input[‘body’]); } public function getId () {return $ this-> id; } public function getTitle () {return $ this-> title; } public function setTitle ($ title) {$ this-> title = $ title; } public function getBody () {return $ this-> body; } public function setBody ($ body) {$ this-> body = $ body; }}

Các tính chất của lớp phải giống với các trường trong bảng cơ sở dữ liệu hoặc bạn có thể xác định chúng bằng chú thích @Colum ("name" = "myfield").

Kho lưu trữ là gì?

Kho lưu trữ cho phép tất cả mã của bạn sử dụng các nhân vật nhưng ko cần biết các nhân vật được lưu trữ như thế nào. Kho lưu trữ chứa tất cả thông tin về tính dai sức, bao gồm ánh xạ từ bảng sang nhân vật. Điều này hỗ trợ một cái nhìn hướng nhân vật hơn về lớp vững bền và làm cho mã ánh xạ được đóng gói hơn.

Hiện giờ đã tới lúc tạo Kho lưu trữ trong App / Repository / PostRepo.php:

ko gian tên AppRepository; sử dụng AppEntityPost; sử dụng DoctrineORMEntityManager; class PostRepo {/ ** * @var string * / private $ class = 'AppEntityPost'; / ** * @var EntityManager * / private $ em; public function __construct (EntityManager $ em) {$ this-> em = $ em; } public function create (Post $ post) {$ this-> em-> stay ($ post); $ this-> em-> flush (); } cập nhật tác dụng công khai (Đăng $ post, $ data) {$ post-> setTitle ($ data[‘title’]); $ post-> setBody ($ data[‘body’]); $ this-> em-> stay ($ post); $ this-> em-> flush (); } public function PostOfId ($ id) {return $ this-> em-> getRepository ($ this-> class) -> findOneBy ([ ‘id’ => $id ]); } public function delete (Post $ post) {$ this-> em-> remove ($ post); $ this-> em-> flush (); } / ** * tạo Bài đăng * @return Bài đăng * / hàm private readyData ($ data) {return new Post ($ data); }}

Doctrine EntityManager hoạt động như một điểm truy cập để quản lý hoàn toàn các thực thể của bạn. Sau đó tạo Controller App / Http / Controllers / PostController.php:

ko gian tên AppHttpControllers; sử dụng AppRepositoryPostRepo làm kho; sử dụng AppValidationPostValidator; class PostController mở rộng Controller {private $ repo; public function __construct (repo $ repo) {$ this-> repo = $ repo; } thay đổi hàm công khai ($ id = NULL) {return View ('admin.index') -> with ([‘data’ => $this->repo->postOfId($id)]); } public function editPost () {$ all = Input :: all (); $ validate = PostValidator :: validate ($ all); if (! $ validate-> pass ()) {return redirect () -> back () -> withInput () -> withErrors ($ validate); } $ Id = $ this-> repo-> postOfId ($ tất cả[‘id’]); if (! is_null ($ Id)) {$ this-> repo-> update ($ Id, $ all); Session :: flash ('msg', 'edit thành công'); } else {$ this-> repo-> create ($ this-> repo-> perpare_data ($ all)); Phiên :: flash ('msg', 'thêm thành công'); } return redirect () -> back (); } public function getve () {return View ('admin.index') -> with ([‘Data’ => $this->repo->retrieve()]); } public function delete () {$ id = Input :: get ('id'); $ data = $ this-> repo-> postOfId ($ id); if (! is_null ($ data)) {$ this-> repo-> delete ($ data); Session :: flash ('msg', 'operation Thành công'); return redirect () -> back (); } else {return redirect () -> back () -> withErrors ('operationFails'); }}}

View và Route giống như tầm thường.

Tôi muốn tạo Trình xác thực của riêng mình dựa trên lớp Trình xác thực của Laravel. Đây là Trình xác thực AppValidationPostValidator.php:

ko gian tên AppValidation; sử dụng Trình xác thực; class PostValidator {public static function validate ($ input) Max:80}

tóm tắt

Nếu bạn chưa làm việc với Doctrine 2 trước đây, tôi kỳ vọng bài viết này thú vị và nhiều thông tin. Laravel 5 ko sử dụng Doctrine, nhưng như bạn thấy, có một số gói cho phép chúng ta dễ dàng sử dụng thư viện này liên kết với Laravel. Tôi đã tạo một ứng dụng blog đơn giản với Laravel 5 và Doctrine ORM và kỳ vọng điều này có thể giúp bạn tạo ứng dụng nhưng bạn mong muốn. Tôi luôn mong đợi những ý kiến ​​đóng góp của bạn.


Là một nhà tăng trưởng PHP, bạn có thể đã bắt gặp thuật ngữ ORM. ORM là một phương thức làm việc với cơ sở dữ liệu, tương tự như cách bạn sử dụng các lớp và nhân vật. Nếu bạn đã nghiên cứu sâu hơn về cách các ứng dụng web được thiết kế và xây dựng, sau lúc khám phá ORM của chúng, bạn sẽ tìm thấy hai mẫu nổi tiếng: Active Record và Data Mapper.

Bản ghi Hoạt động nói đến tới việc ánh xạ một nhân vật vào một hàng trong cơ sở dữ liệu. Thật vậy, mỗi hàng trong cơ sở dữ liệu được gán một nhân vật. Lúc bạn thu được một hàng từ cơ sở dữ liệu, bạn có thể cập nhật, xóa hoặc lưu bằng chính nhân vật đó. Đó là cách hoạt động của Eloquent và Paris và được thực hiện trong Ruby on Rails.

Mặt khác, Data Mapper là một lớp ứng dụng giúp tách các nhân vật từ bộ nhớ trong khỏi cơ sở dữ liệu. Với Data Mapper, các nhân vật trong bộ nhớ thậm chí ko cần biết sự tồn tại của cơ sở dữ liệu. Họ ko cần mã giao diện cho SQL hoặc kiến ​​thức về sơ đồ cơ sở dữ liệu. Một trong những giải pháp tương tự được gọi là Thuyết giáo.

Giáo lý là gì?

Doctrine là một ORM triển khai một mẫu gọi là Data Mapper và cho phép bạn tách các quy tắc nghiệp vụ của ứng dụng khỏi lớp vững bền của cơ sở dữ liệu.

Một số ưu điểm nhưng tôi đã khám phá lúc sử dụng Doctrine với Laravel:

  • Nhanh hơn và dễ sử dụng hơn.
  • Các thực thể (entity) chỉ là các nhân vật PHP thuần túy.
  • Doctrine sử dụng cách tiếp cận “viết mã trước”, vì vậy bạn có thể tạo các thực thể trước, sau đó tự động tạo cơ sở dữ liệu cho chúng. Trái lại cũng được, nhưng mình ko khuyến khích.
  • Hỗ trợ chú thích, XML và YAML cho sơ đồ.
  • 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 cơ sở dữ liệu cụ thể và thực hiện các hành động nhất mực.
  • Các kho lưu trữ trung thành hơn với kho lưu trữ mẫu.
  • Phương thức ghi sau giao dịch cho phép Doctrine có ít tương tác hơn với Cơ sở dữ liệu cho tới lúc phương thức flush () được gọi.

Tất nhiên, Doctrine cũng có những mặt trái của nó, nhưng việc chọn ORM thích hợp là tùy thuộc vào người lập trình.

Giáo lý DQL

DQL là viết tắt của Doctrine Query Language. DQL cho phép bạn tiếng nói truy vấn nhân vật, có tức là thay vì các truy vấn quan hệ truyền thống, bạn có các truy vấn ở dạng nhân vật.

DQL cho phép bạn viết các truy vấn cơ sở dữ liệu hướng nhân vật, rất hữu ích lúc bạn cần truy vấn cơ sở dữ liệu lúc các phương thức mặc định từ kho lưu trữ ko thể (hoặc khó) đạt được.

Truy vấn DQL mẫu:

CHỌN b.id làm ItemId, b.title làm ItemTitle, b.url làm ItemUrl FROM AlirezaDomainIdentityEntitiesMenu u WHERE u.id =: id

Bộ lọc giáo lý

Doctrine cho phép bạn giới hạn kết quả truy vấn bằng cách sử dụng Bộ lọc. Ví dụ: có thể bạn chỉ muốn thay đổi thông tin người dùng đã đăng nhập hoặc đảm bảo dữ liệu người dùng hiện có được truy xuất từ ​​cơ sở dữ liệu. Bộ lọc là một giải pháp tự động để ghi nhớ các điều kiện cụ thể cho tất cả các truy vấn của bạn.

Doctrine hỗ trợ các giới hạn ở mức SQL, vì vậy ko cần phải duy trì mệnh đề trong kho dự án của bạn. Điều này làm tăng tính bảo mật và làm cho mã của bạn dễ đọc hơn.

Hãy xem một ví dụ:

/ ** * @ManyToOne (targetEntity = ”User”) * @JoinColumn (name = ”user_id”, referenceColumnName = ”id”) ** / private $ user;

Như bạn có thể thấy trong thực thể Người dùng, kết quả của JoinColumn được giới hạn cho các mục nhập với điều kiện WHERE user_id =: user_id.

Setup Doctrine 2

Để thiết đặt Doctrine, có một tùy chọn để điều chỉnh nó với cấu hình Laravel 5 hiện nay. Để thiết đặt Doctrine 2 trong một dự án Laravel, hãy chạy lệnh sau:

nhà soạn nhạc yêu cầu laravel-doct / bug

Như thường lệ, gói này sẽ được thêm vào app / config.php, với tư cách là một nhà hỗ trợ dịch vụ:

LaravelDoctrineORMDoctrineServiceProvider :: lớp,

Bí danh cũng phải được định cấu hình:

‘EntityManager’ => LaravelDoctrineORMFacadesEntityManager :: class

Cuối cùng, chúng tôi xuất bản cấu hình cho gói với:

nhà hỗ trợ nghệ thuật php: xuất bản -tag = “config”

Doctrine ko cần cấu hình cơ sở dữ liệu và sử dụng cấu hình Laravel hiện có, nhưng nếu bạn muốn thay đổi nó, bạn nên thay đổi tệp cấu hình Doctrine trong Config / doct.php:

‘nhà quản lý’ => [ ‘default’ => [ ‘dev’ => env(‘APP_DEBUG’), ‘meta’ => env(‘DOCTRINE_METADATA’, ‘annotations’), ‘connection’ => env(‘DB_CONNECTION’, ‘mysql’), ‘namespaces’ => [ ‘App’ ],

Đó là tất cả những gì phải làm!

Thực thể là gì?

“Thực thể” nói đến tới một nhân vật có tính danh riêng lẻ. Một thực thể phải có một số nhận dạng cụ thể và duy nhất trong toàn hệ thống, chẳng hạn như người dùng hoặc sinh viên. Sẽ có các nhân vật khác, chẳng hạn như địa chỉ email, ko phải là thực thể, nhưng là các nhân vật trị giá.

Hãy tạo một ứng dụng Post Entity / Entity / Post.php:

ko gian tên AppEntity; sử dụng DoctrineORMMMapping dưới dạng ORM; / ** * @ORMEntity * @ORMTable (name = ”posts”) * @ORMHasLifecycleCallbacks () * / class Bài đăng {/ ** * @var integer $ id * @ORMColumn (name = ”id”, type = ”integer” , unique = true, nullable = false) * @ORMId * @ORMGeneratedValue (strategy = ”AUTO”) * * / private $ id; / ** * @ORMColumn (type = “string”) * / private $ title; / ** * @ORMColumn (type = “text”) * / private $ body; public function __construct ($ input) {$ this-> setTitle ($ input[‘title’]); $ this-> setBody ($ input[‘body’]); } public function getId () {return $ this-> id; } public function getTitle () {return $ this-> title; } public function setTitle ($ title) {$ this-> title = $ title; } public function getBody () {return $ this-> body; } public function setBody ($ body) {$ this-> body = $ body; }}

Các tính chất của lớp phải giống với các trường trong bảng cơ sở dữ liệu hoặc bạn có thể xác định chúng bằng chú thích @Colum (“name” = “myfield”).

Kho lưu trữ là gì?

Kho lưu trữ cho phép tất cả mã của bạn sử dụng các nhân vật nhưng ko cần biết các nhân vật được lưu trữ như thế nào. Kho lưu trữ chứa tất cả thông tin về tính dai sức, bao gồm ánh xạ từ bảng sang nhân vật. Điều này hỗ trợ một cái nhìn hướng nhân vật hơn về lớp vững bền và làm cho mã ánh xạ được đóng gói hơn.

Hiện giờ đã tới lúc tạo Kho lưu trữ trong App / Repository / PostRepo.php:

ko gian tên AppRepository; sử dụng AppEntityPost; sử dụng DoctrineORMEntityManager; class PostRepo {/ ** * @var string * / private $ class = ‘AppEntityPost’; / ** * @var EntityManager * / private $ em; public function __construct (EntityManager $ em) {$ this-> em = $ em; } public function create (Post $ post) {$ this-> em-> stay ($ post); $ this-> em-> flush (); } cập nhật tác dụng công khai (Đăng $ post, $ data) {$ post-> setTitle ($ data[‘title’]); $ post-> setBody ($ data[‘body’]); $ this-> em-> stay ($ post); $ this-> em-> flush (); } public function PostOfId ($ id) {return $ this-> em-> getRepository ($ this-> class) -> findOneBy ([ ‘id’ => $id ]); } public function delete (Post $ post) {$ this-> em-> remove ($ post); $ this-> em-> flush (); } / ** * tạo Bài đăng * @return Bài đăng * / hàm private readyData ($ data) {return new Post ($ data); }}

Doctrine EntityManager hoạt động như một điểm truy cập để quản lý hoàn toàn các thực thể của bạn. Sau đó tạo Controller App / Http / Controllers / PostController.php:

ko gian tên AppHttpControllers; sử dụng AppRepositoryPostRepo làm kho; sử dụng AppValidationPostValidator; class PostController mở rộng Controller {private $ repo; public function __construct (repo $ repo) {$ this-> repo = $ repo; } thay đổi hàm công khai ($ id = NULL) {return View (‘admin.index’) -> with ([‘data’ => $this->repo->postOfId($id)]); } public function editPost () {$ all = Input :: all (); $ validate = PostValidator :: validate ($ all); if (! $ validate-> pass ()) {return redirect () -> back () -> withInput () -> withErrors ($ validate); } $ Id = $ this-> repo-> postOfId ($ tất cả[‘id’]); if (! is_null ($ Id)) {$ this-> repo-> update ($ Id, $ all); Session :: flash (‘msg’, ‘edit thành công’); } else {$ this-> repo-> create ($ this-> repo-> perpare_data ($ all)); Phiên :: flash (‘msg’, ‘thêm thành công’); } return redirect () -> back (); } public function getve () {return View (‘admin.index’) -> with ([‘Data’ => $this->repo->retrieve()]); } public function delete () {$ id = Input :: get (‘id’); $ data = $ this-> repo-> postOfId ($ id); if (! is_null ($ data)) {$ this-> repo-> delete ($ data); Session :: flash (‘msg’, ‘operation Thành công’); return redirect () -> back (); } else {return redirect () -> back () -> withErrors (‘operationFails’); }}}

View và Route giống như tầm thường.

Tôi muốn tạo Trình xác thực của riêng mình dựa trên lớp Trình xác thực của Laravel. Đây là Trình xác thực AppValidationPostValidator.php:

ko gian tên AppValidation; sử dụng Trình xác thực; class PostValidator {public static function validate ($ input) Max:80}

tóm tắt

Nếu bạn chưa làm việc với Doctrine 2 trước đây, tôi kỳ vọng bài viết này thú vị và nhiều thông tin. Laravel 5 ko sử dụng Doctrine, nhưng như bạn thấy, có một số gói cho phép chúng ta dễ dàng sử dụng thư viện này liên kết với Laravel. Tôi đã tạo một ứng dụng blog đơn giản với Laravel 5 và Doctrine ORM và kỳ vọng điều này có thể giúp bạn tạo ứng dụng nhưng bạn mong muốn. Tôi luôn mong đợi những ý kiến ​​đóng góp của bạn.

#Doctrine #ORM #Và #Laravel

[rule_3_plain]

#Doctrine #ORM #Và #Laravel

[rule_1_plain]

#Doctrine #ORM #Và #Laravel

[rule_2_plain]

#Doctrine #ORM #Và #Laravel

[rule_2_plain]

#Doctrine #ORM #Và #Laravel

[rule_3_plain]

#Doctrine #ORM #Và #Laravel

[rule_1_plain]

Nguồn: besttaichinh.com

#Doctrine #ORM #Và #Laravel

Viết một bình luận