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" />
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 cách tân và phát triển PHPhường, chúng ta có thể sẽ gặp mặt thuật ngữ ORM. ORM là phương thức thao tác với các database, tương tự như nhỏng biện pháp bạn sử dụng những class và object. Nếu chúng ta vẫn nghiên cứu và phân tích sâu rộng về các vận dụng website được thiết kế theo phong cách cùng xây cất ra làm sao, sau khi tìm hiểu ORM của mình, các bạn sẽ tra cứu thấy hai pattern nổi tiếng: Active sầu Record với Data Mapper.

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

Active sầu Record đề cập tới vấn đề ánh xạ một object 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 các bạn mang một row trường đoản cú database, bạn có thể cập nhật, xóa hoặc lưu giữ bởi thiết yếu object kia. Đó là biện pháp Eloquent và Paris hoạt động cùng được tiến hành trong Ruby on Rails.

Mặt không giống, Data Mapper là một trong layer của phần mềm góp tách các object trường đoản cú bộ nhớ vào (in-memory) ra khỏi database. Với Data Mapper, các object trong bộ nhớ lưu trữ thậm chí là không cần biết đến sự tồn tại của database. Chúng không buộc phải interface tekkenbasara.mobi mang đến Squốc lộ hoặc con kiến ​​thức về database schema. Một giải pháp những điều đó hotline là Doctrine.

*

Doctrine là gì?

Doctrine là một trong ORM thực thi một pattern là Data Mapper với có thể chấp nhận được bạn tách biết riêng biệt các business rules của áp dụng khỏi persistence layer của database.

Một số ưu thế nhưng mà tôi vẫn phạt hiện lúc thực hiện Doctrine với Laravel:

Nkhô giòn hơn và dễ áp dụng hơn. Entity (entity) chỉ nên các object (object) PHP đơn giản. Doctrine tiếp cận theo kiểu "tekkenbasara.mobi first", vì chưng vậy bạn cũng có thể tạo ra những entity trước, tiếp nối tạo một database cho chúng một cách auto. Trường phù hợp trở lại cũng rất có thể, dẫu vậy tôi không khuyến nghị. Hỗ trợ chú thích, XML cùng YAML đến schema. DQL (thay thế sửa chữa mang đến SQL) tóm tắt những bảng của bạn. Các sự kiện của Doctrine được cho phép chúng ta dễ dãi liên kết vào những sự kiện database rõ ràng với triển khai một số hành động nhất mực. Các repository trung thành hơn với pattern repository. Pmùi hương thức transactional write-behind cho phép Doctrine không nhiều cửa hàng hơn cùng với Database cho đến lúc phương thức flush() được Call.

Tất nhiên, Doctrine cũng có thể có điểm yếu, mà lại chọn lựa ORM tương xứng 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 bạn ngữ điệu tầm nã vấn object, tức là thế vị truy tìm vấn relational (quan tiền hệ) truyền thống lâu đời, bạn tất cả những truy vấn vấn sống dạng object.

DQL được cho phép các bạn viết những truy vấn vấn database theo phía object, rất có lợi khi chúng ta buộc phải tróc nã vấn database Khi các phương thức mặc định trường đoản cú repository cần yếu (hoặc khó) đã đạt được.

Mẫu truy vấn vấn DQL:

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

Bộ thanh lọc Doctrine

Doctrine có thể chấp nhận được chúng ta giới hạn kết quả truy vấn vấn bởi Filters. Ví dụ: có thể chúng ta chỉ muốn chỉnh sửa thông báo người tiêu dùng sẽ đăng nhập hoặc bảo đảm dữ liệu của người sử dụng hiện tại được mang được từ bỏ database. Filter là giải pháp tự động để ghi nhớ các ĐK cụ thể cho tất cả các truy hỏi vấn của người tiêu dùng.

Xem thêm: Thuật Ngữ Yaoi Có Nghĩa Là Gì? Cùng Tìm Hiểu Về Yaoi, Bl Và Shounen

Doctrine hỗ trợ những số lượng giới hạn mang lại cường độ Squốc lộ, do vậy không cần thiết phải duy trì mệnh đề vào repository của dự án công trình của khách hàng. Điều này giúp gia tăng bảo mật thông tin cùng giúp tekkenbasara.mobi của chúng ta đọc dễ hơn.

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

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

Cài đặt Doctrine 2

Để thiết đặt Doctrine, có một chọn lựa nhằm điều chỉnh tương xứng cù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ư thường xuyên lệ, package sẽ được sản xuất app/config.php, với bốn biện pháp service provider:

LaravelDoctrineORMDoctrineServiceProvider::class, Alias cũng nên đượ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 cho package với:

php artisan vendor:publish --tag="config" Doctrine ko bắt buộc thông số kỹ thuật database cùng áp dụng cấu hình Laravel hiện giờ, mà lại ví như bạn có nhu cầu chuyển đổi nó, bạn nên chuyển đổi file thông số kỹ thuật Doctrine trong Config/doctrine.php:

"managers" => < "default" => < "dev" => env("APP_DEBUG"), "meta" => env("DOCTRINE_METADATA", "annotations"), "connection" => env("DB_CONNECTION", "mysql"), "namespaces" => < "App" >, Đó là tất cả bắt buộc làm!

Entity là gì?

“Entity” tđê mê chiếu đến một object gồm tính danh hiếm hoi. Một entity buộc phải gồm một identifier ví dụ và tốt nhất xuyên thấu khối hệ thống, chẳng hạn như khách hàng hoặc sinc viên. Sẽ bao gồm những object không giống, chẳng hạn như liên quan tin nhắn, chưa phải là entity, nhưng mà là những value objects.

Hãy sản xuất 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->body toàn thân = $body; } Thuộc tính của class cần giống với những field trong bảng của database hoặc chúng ta cũng có thể khẳng định chúng bằng chú thích
Colum ("name"="myfield").

Repository là gì?

Repository được cho phép toàn bộ tekkenbasara.mobi của chúng ta áp dụng các object mà lại ko nên biết các object được gìn giữ như thế nào. Repository đựng tất cả các lên tiếng về persistence, có cả mapping trường đoản cú table đến object. Điều này cung ứng một ánh mắt hướng đối tượng người dùng rộng của persistence layer với làm mapping tekkenbasara.mobi bao gồm tính gói gọn hơn (encapsulated).

Bây giờ đồng hồ là lúc tạo thành Repository trong 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 vận động như access point để quản lý hoàn toàn các entity của chúng ta. Sau đó, tạo ra 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 với Route hệt như bình thường.

Xem thêm: Portal Vein Embolization Là Gì, Embolization

Tôi mê thích 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) alpha_spaces", "body" => "Required", >; return Validator::make($đầu vào, $rules);

Tổng kết

Nếu trước đây chúng ta chưa từng thao tác làm việc với Doctrine 2, tôi hy vọng bài viết này thú vị và đầy đủ thông báo. Laravel 5 ko áp dụng Doctrine, nhưng như bạn có thể thấy, tất cả một số trong những gói có thể chấp nhận được họ thuận tiện sử dụng thỏng viện này cùng với Laravel. Tôi vẫn tạo thành một ứng dụng blog đơn giản dễ dàng cùng với Laravel 5 và Doctrine ORM với hi vọng điều này rất có thể giúp bạn chế tạo vận dụng cơ mà bạn muốn. Tôi luôn đón đợi mọi góp ý từ chúng ta.


Chuyên mục: KHÁI NIỆM LÀ GÌ
Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *