Đị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 0 Bình luận

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 và 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)