Những mỗi quan hệ cơ sở dữ liệu trong laravel

Những mỗi quan hệ cơ sở dữ liệu trong laravel
4.75 (95%) 4 votes

blog-single-post-1024x738Vì sao lựa chọn Laravel Model Relationships

Một trong số những chức năng hưu ích của Eloquent ORM là quan hệ Model. Quan hệ model là gì? Cho phép bạn tìm kiếm và cập nhật đối tượng model trong cơ sở dữ liệu. Tác vụ phổ biến trong bài này là cho bạn tìm bài post blog theo tên tác giả,  theo comment mà liên quan tới bài truy vấn được tìm ra.

Trong Laravel 4.0 thì có 3 loại mối quan hệ chính:

  • One-to-One
  • One-to-Many
  • Many-to-Many

Laravel 4.1 thì bổ sung thêm 2 mối quan hệ đó là

  • Has-Many-Through
  • Polymorphic One-to-One/One-to-Many

Một ví dụ đơn giản blog

Blog này dơn giản gồm những bài post, tác giả post bài, comment cho những bài post và bài post thuộc tag nào (ví dụ: HTML, CSS, Javascript, PHP, MySQL, MongoDB)

blog-homepage

Bạn có thể dowload souce ở đây: DOWNLOAD

Những bước cấu hình poroject như sau:

  • clone the repo
  • chạy composer install
  • lập bảng CSDL trong MySQL
  • chỉnh sửa lại kết nối db (vd: host, database, username, password) trong app/config/database.php
  • chạy migrations, để cài đặt DB schema: php artisan migrate
  • seed the DB để có dữ liệu mẫu: php artisan db:seed

One-to-One

Mỗi bài post có title và body text. Nhưng body text lại được lưu vào một bảng riêng đó là “texts.”

Cấu trúc trong database:

posts

-id

-title

texts

-id

-text

-post-id

Và chúng ta xây dựng 1 lớp Text như sau

 

OK, bây giờ chúng ta muốn truy cập hay trình diễn text theo post thì

$post->text

One-to-Many

Tiếp theo chúng ta có mối quan hệ một nhiều, ví dụ một người có thể viết nhiều bài post

blog-author-1024x738

Trong bảng CSDL:

users

-id

-name

posts

-id

-title

-author_id (aliased user.id)

Tiếp theo chúng ta lập model User có mối quan hệ 1 nhiều trong đó

 

Bây giờ chúng ta truy cập bài post theo tên tác giả

$author->posts

Và trong file view sẽ được code như  sau

 

Bây giờ chúng ta show bài post được viết bởi tác giả nào đó

 

Trong model Post ta có thể viết như sau

Bây giờ chúng ta show tên tác giả theo bài post như  sau

 

Many-to-Many

Một bài post thì có nhiều tags, và một tags thì có thể được gán nhiều bài post  vì vậy chúng ta có mối quan hệ nhiều nhiều giửa posts và tags.

blog-create-post-1024x738

Trong bảng CSDL sẽ được thiết kế như sau:

tags

-id

-name

post-tag

-post_id

-tag_id

– author_id (aliased user.id)

Để định nghĩa mối quan hệ cũng như ví dụ trước ta thêm

 

Vầ nơi view sẽ được code như sau

 

Working with Laravel Model Relationships

Ở những ví dụ trên toàn là chúng ta truy cập dữ liệu. Bây giờ chúng ta sẽ tìm hiểu cách ghi dữ liệu

 blog-tag-1024x738

Trước hết chúng ta cần tạo mới bài post,  Text mới sẽ đi kèm với bài post này. Việc này rất đơn giản với phương thức save()

Tiếp theo chúng ta cần kết hợp user tới bài post.