Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

cách sắp xếp một phản hồi JSON dựa trên mối quan hệ cơ sở dữ liệu bằng cách sử dụng tài liệu hùng hồn

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi .Net MySql Khóa đã cho không có trong từ điển

  2. Express js req.body trả về trống

  3. Mysql không khởi động trong vùng chứa docker trên MacOS sau khi cập nhật docker

  4. Không thể nâng cấp SonarQube từ 4.5.2 lên 5.0

  5. Làm cách nào để kết nối với máy chủ MySQL trên máy chủ khác?