JSON mong đợi của bạn hiển thị foods
là con của portions
. Để làm được điều này, bạn cần thiết lập mối quan hệ này.
Trên Portion
của bạn mô hình, bạn cần thiết lập mối quan hệ sau:
public function foods() {
return $this->hasMany(Food::class);
}
Với thiết lập mối quan hệ này, bây giờ bạn có thể nhận được dữ liệu của mình như sau:
$categories = App\FoodGroup::with('portions.foods')->get();
Thao tác này sẽ tải các nhóm thực phẩm của bạn, sau đó nó sẽ tải các phần vào các nhóm thực phẩm và sau đó nó sẽ tải các loại thực phẩm vào các phần.
Chỉnh sửa
Tôi có thể đã hơi hiểu sai câu hỏi của bạn. Tôi cho rằng bạn có portions
mối quan hệ được xác định trên \App\FoodGroup
. Nếu không, bạn có thể thêm cái này như vậy:
FoodGroup:
public function portions() {
// the second parameter is the name of the pivot table.
// in this case, your foods table connects your portions and food groups.
return $this->belongsToMany(Portion::class, 'foods')->distinct();
}
Chỉnh sửa 2
Giải pháp này hơi khó vì nó đang xử lý foods
bảng dưới dạng bảng tổng hợp, mặc dù nó không được thiết kế đặc biệt cho việc đó. Do đó, có nhiều mục nhập trong foods
bảng có chứa các giá trị cặp khóa giống nhau và đây là lý do tại sao bạn nhận được các mô hình có liên quan trùng lặp.
Nếu bạn ném một distinct()
vào mối quan hệ, điều này cần giải quyết vấn đề, vì nó sẽ loại bỏ các bản sao được tạo ra từ liên kết bên trong. Đoạn mã trên đã được sửa đổi.