Chà, cơ sở dữ liệu của bạn và các định nghĩa mô hình của bạn trông ổn, cũng như mã của bạn để thêm một danh mục vào một bài báo. Tuy nhiên, mã của bạn để thêm một bài báo vào một danh mục hơi bị lỗi.
Đầu tiên, không có $category->articles()
phương pháp. Để truy cập các đối tượng liên quan, bạn sử dụng mối quan hệ đã xác định của mình:$category->categorizable()
. Ngoài ra, thuộc tính mối quan hệ, $category->categorizable
sẽ chứa đối tượng liên quan được tải và nó sẽ tự động là một Article
hoặc một Service
đối tượng, tùy thuộc vào những gì có liên quan.
Thứ hai, đây là morphTo()
mặt của mối quan hệ; nó hoạt động giống như belongsTo()
, và có các phương pháp tương tự. Ví dụ:không có save()
nhưng bạn có associate()
phương pháp. Điều này có nghĩa là bạn phải tạo bài viết của mình trước, sau đó liên kết nó với danh mục. Ngoài ra, associate()
không tự động lưu, vì vậy bạn cũng cần phải gọi như vậy.
$article = new App\Article();
$article->title = 'This is an article title.';
$article->save();
$category = App\Category::find(1);
$category->categorizable()->associate($article);
$category->save();
// showing use of relationship attribute
$related = $category->categorizable;
echo get_class($related);