Mysql
 sql >> база данни >  >> RDS >> Mysql

как да поръчате JSON отговор въз основа на връзката с базата данни, използвайки eloquent

Очакваният ви JSON показва foods като дете на portions . За да направите това, трябва да настроите тази връзка.

На вашата Portion модел, трябва да настроите следната връзка:

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

С тази настройка на връзката вече можете да получите данните си по следния начин:

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

Това ще зареди вашите хранителни групи, след това ще зареди порциите в групите храни и след това ще зареди храните в порциите.

Редактиране

Може да съм прочел малко погрешно въпроса ви. Предполагах, че имате portions връзка, дефинирана в \App\FoodGroup . Ако не, можете да добавите това така:

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

Редактиране 2

Това решение е малко хакерско, защото третира foods таблица като централна маса, въпреки че не е специално проектирана за това. Поради това в foods има множество записи таблица, която съдържа едни и същи стойности на двойки ключове и ето защо получавате дублирани свързани модели.

Ако хвърлите distinct() върху връзката, това трябва да се погрижи за проблема, тъй като ще премахне дубликатите, създадени от вътрешното присъединяване. Кодът по-горе е променен.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Обработка на преходни неизправности в .net core 2.1 MVC за MySQL база данни

  2. Активирайте Entity Framework 6 за MySql (C#) в WinForms на Microsoft Visual Studio 2013

  3. Проблеми с Django и mysql на Mavericks

  4. Как да използвам GROUP BY за конкатенация на низове в MySQL?

  5. Изберете текущите месеци, записващи mysql от колоната с времеви печат