EnglishEspañolTiếng ViệtVietnamese (Tiếng Việt) translation by Vy Cam Nguyen (you can also view the original English article) Là một nhà phát triển PHP, bạn có thể đã gặp thuật ngữ ORM, ORM là phương pháp làm việc với các database, tương tự như cách bạn sử dụng các class và object" /> EnglishEspañolTiếng ViệtVietnamese (Tiếng Việt) translation by Vy Cam Nguyen (you can also view the original English article) Là một nhà phát triển PHP, bạn có thể đã gặp thuật ngữ ORM, ORM là phương pháp làm việc với các database, tương tự như cách bạn sử dụng các class và object" />

DOCTRINE LÀ GÌ

Length:ShortLanguages:url-selector#selectionChanged" data-controller="url-selector">EnglishEspañolTiếng Việt

Vietnamese (Tiếng Việt) translation by Vy Cam Nguyen (you can also view the original English article)


Là một công ty trở nên tân tiến PHPhường, bạn có thể sẽ gặp gỡ thuật ngữ ORM. ORM là phương pháp thao tác cùng với các database, giống như nlỗi bí quyết bạn sử dụng các class và object. Nếu bạn vẫn phân tích sâu hơn về các vận dụng website được thiết kế theo phong cách với thiết kế ra làm sao, sau thời điểm mày mò ORM của mình, các bạn sẽ tìm thấy nhì pattern nổi tiếng: Active RecordData Mapper.

Bạn đang xem: Doctrine là gì

Active Record đề cùa đến câu hỏi ánh xạ một object cho tới một row trong database. Thật vậy, mỗi row vào database được gán thành một object. Lúc chúng ta lấy một row từ bỏ database, chúng ta có thể update, xóa hoặc giữ bằng chính object đó. Đó là bí quyết Eloquent với Paris vận động và được triển khai vào Ruby on Rails.

Mặt khác, Data Mapper là 1 trong những layer của ứng dụng giúp bóc các object tự bộ nhớ lưu trữ vào (in-memory) thoát khỏi database. Với Data Mapper, các object trong bộ nhớ lưu trữ thậm chí không nên biết tới sự mãi mãi của database. Chúng không bắt buộc interface mni-alive.com mang đến Squốc lộ hoặc kiến ​​thức về database schema. Một phương án những điều đó điện thoại tư vấn là Doctrine.

*

Doctrine là gì?

Doctrine là một trong ORM xúc tiến một pattern là Data Mapper cùng có thể chấp nhận được bạn bóc biết riêng biệt các business rules của ứng dụng ngoài persistence layer của database.

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

Nhanh khô hơn và dễ áp dụng hơn. Entity (entity) chỉ là các object (object) PHPhường dễ dàng và đơn giản. Doctrine tiếp cận theo kiểu "mni-alive.com first", vày vậy chúng ta có thể chế tác những entity trước, sau đó tạo một database cho cái đó một cách auto. Trường đúng theo ngược trở lại cũng có thể, tuy vậy tôi không khuyến nghị. Hỗ trợ chú thích, XML và YAML mang lại schema. DQL (thay thế mang đến SQL) tóm tắt các bảng của chúng ta. Các sự kiện của Doctrine được cho phép các bạn dễ dàng liên kết vào những sự khiếu nại database rõ ràng và tiến hành một số trong những hành vi nhất định. Các repository trung thành hơn cùng với pattern repository. Phương thức transactional write-behind có thể chấp nhận được Doctrine ít ảnh hưởng rộng với Database đến khi cách làm flush() được gọi.

Tất nhiên, Doctrine cũng có điểm yếu, nhưng lại lựa chọn ORM phù hợp là tuỳ vào lập trình viên.

Doctrine DQL

Dquốc lộ viết tắt tự Doctrine Query Language. DQL được cho phép các bạn ngôn ngữ tróc nã vấn object, Tức là nỗ lực bởi vì tróc nã vấn relational (quan liêu hệ) truyền thống lâu đời, chúng ta gồm những truy nã vấn nghỉ ngơi dạng object.

Dquốc lộ chất nhận được bạn viết những truy vấn database theo hướng object, khôn xiết hữu dụng khi bạn đề nghị truy vấn database Khi các phương thức khoác định trường đoản cú repository cần thiết (hoặc khó) đã đạt được.

Mẫu tróc nã vấn DQL:

SELECT b.id as ItemId, b.title as ItemTitle , b.url as ItemUrl FROM AlirezaDomainIdentityEntitiesMenu u WHERE u.id =:id

Sở thanh lọc Doctrine

Doctrine có thể chấp nhận được các bạn số lượng giới hạn tác dụng truy hỏi vấn bằng Filters. Ví dụ: rất có thể chúng ta chỉ hy vọng sửa đổi thông báo người dùng vẫn đăng nhập hoặc đảm bảo tài liệu của bạn hiện tại được rước được từ bỏ database. Filter là phương án auto để ghi lưu giữ các điều kiện ví dụ mang lại tất cả những truy nã vấn của công ty.

Xem thêm: Male, Female Là Gì ? Female Là Gì?" Ý Nghĩa Của Chúng Là Gì?

Doctrine cung ứng các số lượng giới hạn đến cường độ Squốc lộ, vì chưng vậy không cần thiết phải bảo trì mệnh đề trong repository của dự án công trình của doanh nghiệp. Như vậy giúp tăng thêm bảo mật với giúp mni-alive.com của chúng ta dễ nhìn đọc hơn.

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

/** *
JoinColumn(name="user_id", referencedColumnName="id") **/ private $user; Nlỗi bạn có thể thấy trong User entity, hiệu quả của JoinColumn chỉ số lượng giới hạn trong các mục có ĐK là WHERE user_id =: user_id.

Cài đặt Doctrine 2

Để cài đặt Doctrine, bao gồm một chọn lựa nhằm kiểm soát và điều chỉnh cân xứng với cấu hình bây giờ của Laravel 5. Để cài đặt Doctrine 2 trong dự án Laravel, chạy lệnh sau đây:

composer require laravel-doctrine/orm Nhỏng thường xuyên lệ, package sẽ tiến hành thêm vào app/config.php, với tứ bí quyết service provider:

LaravelDoctrineORMDoctrineServiceProvider::class, Alias cũng phải được định cấu hình:

"EntityManager" => LaravelDoctrineORMFacadesEntityManager::class Cuối cùng, Shop chúng tôi xuất bạn dạng thông số kỹ thuật mang đến package với:

php artisan vendor:publish --tag="config" Doctrine ko nên thông số kỹ thuật database với sử dụng cấu hình Laravel hiện nay, nhưng nếu như bạn có nhu cầu đổi khác nó, bạn nên chuyển đổi tệp tin cấu hình Doctrine trong Config/doctrine.php:

"managers" => < "default" => < "dev" => env("APP_DEBUG"), "meta" => env("DOCTRINE_METADATA", "annotations"), "connection" => env("DB_CONNECTION", "mysql"), "namespaces" => < "App" >, Đó là toàn bộ đề nghị làm!

Entity là gì?

“Entity” tyêu thích chiếu cho một object bao gồm danh tính đơn nhất. Một entity đề xuất tất cả một identifier ví dụ và nhất xuyên suốt hệ thống, chẳng hạn như quý khách hoặc sinch viên. Sẽ có những object khác, chẳng hạn như liên tưởng tin nhắn, không hẳn là entity, nhưng là những value objects.

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

namespace AppEntity;use DoctrineORMMapping as ORM;/** *
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->toàn thân = $body; } Thuộc tính của class nên giống với những field trong bảng của database hoặc chúng ta có thể xác định chúng bởi ghi chú
Colum ("name"="myfield").

Repository là gì?

Repository có thể chấp nhận được tất cả mni-alive.com của chúng ta sử dụng các object nhưng mà không cần phải biết các object được giữ giàng ra sao. Repository chứa tất cả những thông báo về persistence, bao gồm cả mapping trường đoản cú table đến object. Điều này cung ứng một mắt nhìn phía đối tượng người tiêu dùng rộng của persistence layer cùng có tác dụng mapping mni-alive.com tất cả tính đóng gói rộng (encapsulated).

Bây giờ là dịp tạo ra Repository vào App/Repository/PostRepo.php:

namespace AppRepository;use AppEntityPost;use DoctrineORMEntityManager;class PostRepo /** *
var EntityManager */ private $em; public function __construct(EntityManager $em) $this->em = $em; public function create(Post $post) $this->em->persist($post); $this->em->flush(); public function update(Post $post, $data) $post->setTitle($data<"title">); $post->setBody($data<"body">); $this->em->persist($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(); /** * create Post *
return Post */ private function prepareData($data) return new Post($data); Doctrine EntityManager hoạt động nhỏng access point nhằm thống trị trọn vẹn những entity của chúng ta. Sau kia, tạo thành Controller App/Http/Controllers/PostController.php:

namespace AppHttpControllers;use AppRepositoryPostRepo as repo;use AppValidationPostValidator;class PostController extends Controller private $repo; public function __construct(repo $repo) $this->repo = $repo; public function edit($id=NULL) return View("admin.index")->with(<"data" => $this->repo->postOfId($id)>); public function editPost() $all = Input::all(); $validate = PostValidator::validate($all); if (!$validate->passes()) return redirect()->back()->withInput()->withErrors($validate); $Id = $this->repo->postOfId($all<"id">); if (!is_null($Id)) $this->repo->update($Id, $all); Session::flash("msg", "edit success"); else $this->repo->create($this->repo->perpare_data($all)); Session::flash("msg", "add success"); return redirect()->back(); public function retrieve() 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 Success"); return redirect()->back(); else return redirect()->back()->withErrors("operationFails"); View cùng Route y hệt như bình thường.

Tôi đam mê tạo thành Validator của riêng biệt bản thân dựa trên class Validator của Laravel. Dưới đây là Validator AppValidationPostValidator.php:

namespace AppValidation;use Validator;class PostValidator public static function validate($input) Max:80

Tổng kết

Nếu trước đây chúng ta chưa từng làm việc cùng với Doctrine 2, tôi mong muốn bài viết này độc đáo với đủ công bố. Laravel 5 ko áp dụng Doctrine, tuy thế nlỗi chúng ta cũng có thể thấy, tất cả một vài gói được cho phép chúng ta dễ dàng áp dụng thư viện này với Laravel. Tôi sẽ tạo một vận dụng blog đơn giản cùng với Laravel 5 và Doctrine ORM và mong muốn điều đó rất có thể giúp cho bạn chế tạo ra vận dụng mà lại bạn mong muốn. Tôi luôn luôn đón chờ số đông góp ý từ chúng ta.

Leave a Reply

Your email address will not be published. Required fields are marked *