Quay lại

Định nghĩa relationships không dùng trong Eloquent models trong Laravel Chuyên mục PHP và Laravel    2023-08-03    628 Lượt xem    90 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Định nghĩa relationships không dùng trong Eloquent models trong Laravel

Bạn có thể biết cách điển hình để xác định các mối quan hệ model  trong Laravel Eloquent. tức là bên trong chính các model.

Chẳng hạn, nếu chúng ta muốn xác định mối quan hệ “one-to-one” giữa model Order Customer trong đó Order thuộc về Customer , bạn có thể định nghĩa nó như sau.

namespace App;

use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    /**
     * Get the customer that owns the order.
     */
    public function user()
    {
        return $this->belongsTo('App\Customer');
    }
}

Tại đây, Eloquent sẽ cố gắng match customer_id từ Order model với id trên Customer model và dựa vào đó sẽ tìm nạp các bản ghi.

Đây là một cách để xác định các relationships. Nhưng có một cách khác trong Eloquent mà bạn có thể xác định các relationships một cách nhanh chóng bên ngoài các model đó là phương thức RelationRelationUsing.

The resolveRelationUsing method

Vì vậy, nếu chúng ta định nghĩa mối quan hệ trước đó bằng cách sử dụng resolveRelationUsing, chúng ta có thể làm như sau.

use App\Order;
use App\Customer;

Order::resolveRelationUsing('customer', function ($orderModel) {
    return $orderModel->belongsTo(Customer::class, 'customer_id');
});

Bạn có thể xác định các relationships  này trong phương thức root của App\Providers\AppServiceProvider.

Như bạn có thể thấy, phương thức chấp nhận hai tham số. Tham số đầu tiên là tên của mối quan hệ mà chúng ta muốn xác định và thứ hai, là một Closure nhận một instance của model mà chúng ta muốn xác định mối quan hệ.

Bên trong Closure, bạn có thể xác định các mối quan hệ như bình thường nhưng với một ngoại lệ là bạn sẽ cần cung cấp các đối số key name rõ ràng vào các phương thức relationship của Eloquent. Trong trường hợp của chúng ta, chúng ta đã passed customer_id một cách rõ ràng.

Xác định relationships này ở đâu

Bây giờ, một câu hỏi có thể xuất hiện trong đầu bạn rằng bạn nên xác định những mối quan hệ “đang diễn ra” này ở đâu? Câu trả lời là, bạn có thể xác định các mối quan hệ này trong phương thức boot của một trong service providers của mình và bạn sẽ ổn.

định

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday