Вложенная Eager загрузка с необязательным предложением where - PullRequest
0 голосов
/ 03 мая 2018

Я использую eloquent со Slim Framework, но, похоже, застрял в проблеме, связанной с многоуровневой энергичной загрузкой с необязательным предложением where. Сначала немного о проблеме.

Существует 3 таблицы Category, Sub_category и Child_category.

Таблица sub_category содержит столбец 'category_id', который является внешним ключом к 'id' таблицы категорий.

Таблица child_category содержит столбец 'sub_category_id', который является внешним ключом для 'id' таблицы sub_category

Мне удалось получить все данные из таблиц в соответствии с иерархией со следующим

$categoryHierarchy = Category::with([
  'subCategories' => function ($query) {
    $query->select('id', 'category_id', 'name');
  },
  'subCategories.childCategories' => function ($query) {
    $query->select('id', 'sub_category_id', 'name');
  }
])
->select('id', 'name', DB::raw('CONCAT("'.$_SERVER['SERVER_NAME'].'/",carousel_image) AS image'))->get();

Теперь, как часть API, мне нужно получить все / частичные данные из этой иерархии

т.е. если указан category_id, мне нужно указать только иерархию этой категории.

Если указан идентификатор подкатегории (вместе с идентификатором категории), то будет предоставлена ​​только соответствующая категория, подкатегория и все ее дочерние категории

Аналогично, API может также отфильтровывать дочернюю категорию (вместе с категорией и подкатегорией)

Я пытался сделать это «где», но он вернул пустой набор данных.

Любая помощь очень ценится.

UPDATE


Часть whereHas выглядела примерно так, как показано ниже. Но, как ни странно, у меня сейчас нет этого кода с собой, и хотя он не проверен, он был очень близок к реализации.

$categoryHierarchyQuery = Category::with([
  'subCategories' => function ($query) {
  $query->select('id', 'category_id', 'name');
  },
  'subCategories.childCategories' => function ($query) {
  $query->select('id', 'sub_category_id', 'name');
  }
  ])
  ->whereHas(['subCategories' => function ($query) use ($subcategoryId) {
    if($subcategoryId != null)
      $query->where('id', $subcategoryId);
  },
  'subCategories.childCategories' => function ($query) use($childCategoryId) {
    if($childCategoryId != null)
      $query->where('id', $childCategoryId);
    }])
  ->select('id', 'name', DB::raw('CONCAT("'.$_SERVER['SERVER_NAME'].'/",carousel_image) AS image'))->get();

  if($categoryHierarchyQuery != null)
  {
    $categoryHierarchyQuery->where('id', $categoryId);
  }
  $categoryHierarchy = $categoryHierarchyQuery->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...