One to One (ok)

https://viblo.asia/p/eloquent-relationships-in-laravel-phan-1-PdbGnoEdeyA

One to One

Mối quan hệ one-to-one là mối quan hệ hết sức cơ bản. Ví dụ, một User có thể được liên kết với 1 Phone. Để xác định mối quan hệ này, chúng ta đặt một method phone trên User model. Phương thức phone nên trả về kết quả của 1 phương thức hasOne trên cơ sở của lớp Eloquent model:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * Get the phone record associated with the user.
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

Đối số đầu tiên truyền cho phương thức hasOne là tên của model được liên kết. Một khi các mối quan hệ được xác định, chúng ta có thể truy xuất các bản ghi sư dụng Eloquent's dynamic properties. Dynamic properties cho phép bạn truy cập vào các relationship functions như thể nó là thuộc tính được định nghĩa trên các model:

$phone = User::find(1)->phone;

Eloquent giả định các foreign key dựa theo tên model.Trong trường hợp này, Phone model sẽ tự động lấy foreign key là user_id. Nếu bạn muốn thay đổi điều này, bạn có thể thêm vào đối số thứ 2 của hasOne method:

return $this->hasOne('App\Phone', 'foreign_key');

Ngoài ra, Eloquent cho rằng foreign key cần phải có một giá trị phù hợp với cột id của parent. Nói cách khác, Eloquent sẽ tìm kiếm những giá trị của cột id của User trong cột user_id của các bản ghi Phone. Nếu bạn muốn relationship sử dụng các cột khác với cột id, bạn có thể truyền thêm 1 đối số thứ 3 trong phương thức hasOne như sau:

return $this->hasOne('App\Phone', 'foreign_key', 'local_key');

Last updated