Mối quan hệ (Relationships) trong Laravel

Có lẽ một kiến thức gây khá nhiều khó khăn khi tìm hiểu về Laravel. Với người mới bắt đầu thì nó thực sự không dễ nắm bắt chút nào. Thấu hiểu được điều đó hôm nay mình sẽ nói về các mối quan hệ (Relationships) trong Laravel thường được sử dụng.

Tại sao lại sử dụng Relationships?

Một ví dụ đơn giản đó là trong một website có rất nhiều bài viết, mỗi bài như vậy sẽ chọn một chuyên mục. Và một chuyên mục có thể chọn cho nhiều post khác nhau. Như vậy ta sẽ thấy mối quan hệ của bài viết và category khá rõ ràng.

relation-ship-laravel-2

Để thực sự hiểu hơn bạn hãy xem trong Database có những gì đã nhé.

moi-quan-he

Trong bảng posts sẽ có thêm một cột chứa khóa ngoại là category_id. Khóa này sẽ bằng với id trong bảng categories.

Cột category_id chứa id của chuyên mục. Nó sẽ được thêm vào khi bạn viết chức năng thêm bài viết cho Laravel.

Nếu bạn vẫn chưa hiểu lắm hãy đọc lại Join nhiều bảng trong Laravel

Các mối quan hệ Relationships trong Laravel

1. Mối quan hệ 1 – 1

Quan hệ một – một (còn gọi là quan hệ 1-1 hay one to one). Ví dụ một bài viết chỉ có một chuyên mục duy nhất và ngược lại.

Tạo một tập tin là Posts.php tại Models

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Posts extends Model
{
    protected $table = 'posts';

    protected $primaryKey = 'id';
    
    public $timestamp = false;
    
    public function category()
    {
    	return $this->hasOne('App\Models\Category','id');
    }
}

Với quan hệ một một chúng ta sẽ sử dụng phương thức hasOne().

Tiếp theo tại ra một file là Category.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';

    protected $primaryKey = 'id';
    
    public $timestamp = false;

    public function posts()
    {
        return $this->belongsTo('App\Models\Posts', 'id');
    }
}

Tại BlogController.php hãy viết một đoạn mã

public function relationship() {
        $data = Posts::find(1)->category->toArray();
        dd($data);
    }

Và tại web.php trong route hãy thêm dòng lệnh sau

Route::get('relationship', 'App\Http\Controllers\[email protected]');

http://localhost/laravel/relationship lên trình để xem kết quả trả về là gì nào.

moi-quan-he-1-1

Tiếp đó mình sẽ thay thế public function relationship() {

$data = Category::find(1)->posts->toArray();
dd($data);

Lúc này kết quả trả về là bảng posts

moi-quan-he-1-1-1

2. Quan hệ nhiều – nhiều

Mối quan hệ nhiều – nhiều (Many to Many) hiểu một cách đơn giản là một bài viết có thể chọn nhiều chuyên mục, ngược lại một chuyên mục cũng xếp được nhiều bài viết.

Lúc này ta phải sử dụng phương thức

return $this->belongsToMany('App\Models\Posts');

Hoặc

return $this->belongsToMany('App\Models\Category');

Đang cập nhật thêm…

Với Relationships khi viết code sẽ gọn gàng hơn so với dùng Join Table. Tuy nhiên nó sẽ cũng tương đối hơi khó hiểu. Qua những ví dụ trên hi vọng bạn đã phần nào hiểu được cách sử dụng mối quan hệ ở trong Laravel rồi.

Cùng chủ đề

Chuyên mục:
Tag:

Bình luận!

Xin lưu ý rằng tất cả các bình luận đều được kiểm duyệt theo chính sách bảo mật và tất cả các liên kết đều là nofollow. KHÔNG sử dụng từ khóa trong trường tên. Hãy để lại một cuộc trò chuyện cá nhân và ý nghĩa. *