Mysql
 sql >> Baza danych >  >> RDS >> Mysql

jak zamówić odpowiedź JSON na podstawie relacji z bazą danych za pomocą eloquent

Twój oczekiwany JSON zawiera foods jako dziecko portions . Aby to zrobić, musisz skonfigurować tę relację.

Na twojej portions modelu, musisz ustawić następującą relację:

public function foods() {
    return $this->hasMany(Food::class);
}

Dzięki tej konfiguracji relacji możesz teraz uzyskać swoje dane w następujący sposób:

$categories = App\FoodGroup::with('portions.foods')->get();

Spowoduje to załadowanie twoich grup żywności, następnie załaduje porcje do grup żywności, a następnie załaduje żywność do porcji.

Edytuj

Mogłem trochę źle zinterpretować twoje pytanie. Założyłem, że masz portions relacja zdefiniowana w \App\FoodGroup . Jeśli nie, możesz dodać to w ten sposób:

Grupa Żywności:

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();
}

Edytuj 2

To rozwiązanie jest trochę dziwaczne, ponieważ traktuje foods tabeli jako tabeli przestawnej, chociaż nie została specjalnie do tego zaprojektowana. Z tego powodu w foods znajduje się wiele wpisów tabela zawierająca te same wartości pary kluczy i dlatego otrzymujesz zduplikowane powiązane modele.

Jeśli wrzucisz distinct() na relację, powinno to rozwiązać problem, ponieważ wyeliminuje duplikaty utworzone z połączenia wewnętrznego. Powyższy kod został zmodyfikowany.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Import CSV MySQL:wartość daty i godziny

  2. Nie można wyświetlić wartości oddzielonych przecinkami w tabeli

  3. Jak podzielić wynikową kolumnę na wiele kolumn

  4. Alternatywa ograniczenia MySQL CHECK

  5. Serwer napotkał błąd wewnętrzny lub nieprawidłową konfigurację i nie mógł zrealizować Twojego żądania