Custom Polymorphic Types

https://viblo.asia/p/eloquent-relationships-in-laravel-phan-2-aRBvXWEokWE

Theo mặc định, Laravel sẽ sử dụng tên lớp đầy đủ để lưu trữ các loại model có liên quan. Ví dụ, với các ví dụ ở trên, nơi một comment có thể thuộc về một Post hoặc một Video, commentable_type mặc định sẽ là một trong hai App\Post hoặc App\Video tương ứng. Tuy nhiên, bạn có thể muốn tách cơ sở dữ liệu của bạn từ cấu trúc bên trong của ứng dụng của bạn. Trong trường hợp đó, bạn có thể xác định một mối quan hệ "morph map" để hướng dẫn Eloquent để sử dụng một tên tùy chỉnh cho mỗi model thay vì tên lớp:

use Illuminate\Database\Eloquent\Relations\Relation;

Relation::morphMap([
    'posts' => App\Post::class,
    'videos' => App\Video::class,
]);

Bạn có thể đăng ký morphMap trong các boot function của AppServiceProvider của bạn hoặc tạo ra một service provider riêng biệt nếu bạn muốn.

Last updated