使用可选的where子句

时间:2018-05-03 00:12:11

标签: php eloquent

我正在使用简洁的框架,但我似乎陷入了涉及使用可选的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,我需要单独提供该类别的层次结构。

如果提供了子类别ID(以及类别ID),则只提供相关类别,子类别及其所有子类别

同样,api也可以过滤掉子类别(以及category和sub_category)

我已经尝试过这样做' whereHas'但它返回了一个空的数据集。

非常感谢任何帮助。

更新

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

0 个答案:

没有答案