Пользовательские SQL-запросы в Directus

Допустим, у меня есть такая структура базы данных MySQL:

Меню:

id  name
 3  Tartiflette
 4  Lasagne

Ингредиент:

id  name        price
15  Carrot      2.00    
39  Garlic      3.00    
40  Reblochon   5.00    
55  Onion       1.00    

Menu_ingredient:

id  ingredient_id   menu_id quantity
4   15              4       2
5   55              4       1
6   39              4       1
7   40              3       2
8   55              3       3

Resa_menu:

id  resa_id menu_id people
 1  1       4       3
 2  1       3       2

Реса:

id
1

Как я могу получить все ингредиенты из одной резервации, используя один параметр запроса с элементами / конечной точкой?

Я пробовал запрос, используя items/resa_menu? Fields=*.* (И некоторые другие комбинации, но не повезло).

Я также настроил представление SQL (виртуальная таблица), получая всю информацию, необходимую с помощью запроса, но этот вид SQL, похоже, не выбирается Directus.

SELECT 
  ingredient.name as ing_name,
  (resa_menu.people * ingredient.price) as price,
  (resa_menu.people * menu_ingredient.quantity) as quantity 
FROM resa_menu 
INNER JOIN menu             ON menu.id = resa_menu.menu_id 
INNER JOIN resa             ON resa.id = resa_menu.resa_id 
INNER JOIN menu_ingredient  ON menu_ingredient.menu_id = menu.id 
INNER JOIN ingredient       ON ingredient.id = menu_ingredient.ingredient_id 
GROUP BY ingredient.id;

Ожидаемый результат:

ing_name       price  quantity
Carrot         6.00   6
Garlic         9.00   3
Reblochon      10.00  4
Onion          3.00   3

Конкретная цель здесь - получить сводку всех ингредиентов, необходимых для бронирования (объединение всех меню, умножение количества на количество человек). Но мой вопрос более общий: как вы можете сделать несколько JOIN, как в этом запросе, с Directus API?

Большое спасибо за помощь!

2 ответа

Я думаю, что вы имеете в виду, что вы запрашиваете конечную точку /items/Resa_menu и делать *.* возвращается Menu_ingredient связанные данные, однако вы хотите, чтобы список ингредиентов тоже вернулся? для этого, вы бы не просто изменили свой запрос полей на *.*.* получить три уровня отношений?

Или это то, что ?fields=*.* просто не работает вообще?

Используйте левое соединение, и вам не нужно группировать по

          select i.name,(i.price* coalesce(rm.people,1)) as price,
             (mi.quantity*coalesce(rm.people,1)) as quantity
            from Ingredient i left join 
            Menu_ingredient mi on i.id =mi.ingredient_id
            left join Resa_menu rm on mi.menu_id =rm.menu_id 
Другие вопросы по тегам