как показать подкатегории в категориях? - PullRequest
0 голосов
/ 26 октября 2018

А вот и код

 public function getSubCategory(Request $request)

{

    $response = array();
    try {
        $categories = Category::where(['status' => 0, 'parent_id' => 0])- >get();
        $subCategory = Category::where('status', 0)->where('parent_id', '!=', 0)->get();

        foreach ($subCategory as $sub) {

            $categoryTitle = Category::where(['id' => $sub->parent_id])- >get(['title']);


            $result[] = array(

                'cat_title' => $categoryTitle[0]->title,
                'sub_title' => $sub->title,

            );
        }
            if (count($result) > 0) {
                $response = (new ApiMessageController())->successResponse($result, "Categories List Found!");
            } else {
                $response = (new ApiMessageController())->failedresponse("No Categories List Found");
            }
    } catch (\Illuminate\Database\QueryException $ex) {
        $response = (new ApiMessageController())->queryexception($ex);
    }
    return $response;
}

Я хотел бы отобразить родительскую категорию и ее детей под ней.Примерно так:

  1. Категория
    • Sub 1
    • Sub 2
  2. Категория
    • Sub 1
    • Sub 2

я хочу показать данные типа см. Демонстрацию

Структура базы данных.Обе категории и подкатегории находятся в одной таблице. База данных

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Вот как я буду действовать:

  • Сначала я получу все категории
  • Тогда я получу все подкатегории, прикрепленные к каждой из категорий
  • Я добавлю это в таблицу
  • Наконец я вернусь к столу.

Вот так выглядит мой код:

public function getSubCategory(Request $request){

    $response = array();
    try {
        $categories = Category::where(['status' => 0, 'parent_id' => 0])- >get();
        foreach ($categories as $c) {
            $subcategories = Category::where("parent_id", $c->id)->get();
            $response[] = [$c, $subcategories];
        }

        if (count($response) > 0) {
            $response = (new ApiMessageController())->successResponse($result, "Categories List Found!");
        } else {
            $response = (new ApiMessageController())->failedresponse("No Categories List Found");
        }
    } catch (\Illuminate\Database\QueryException $ex) {
        $response = (new ApiMessageController())->queryexception($ex);
    }
    return $response;
}

Надеюсь, мой ответ поможет!

0 голосов
/ 26 октября 2018

Я предлагаю вам использовать NestedSet. Таким образом, вы можете создать дерево категорий и получить все данные по глубине.

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

  • Очень удобно работать с древовидной структурой. (+)
  • Нет рекурсивного выбора (+)
  • У вас может быть отдельная нормализованная таблица (+)
  • Возможно, длинный запрос (-)

Вы можете увидеть все детали здесь

0 голосов
/ 26 октября 2018

Попробуйте это ::

public function getSubCategory(Request $request)
{
    $response = array();
    try {
        $allData = array();
        // get all parent category 
        $categories = Category::where(['status' => 0, 'parent_id' => 0])->get();        
        foreach ($categories as $key=>$sub) {
            // now take one by one it's child category 
            $subCategory = Category::where('status', 0)->where('parent_id', '=', $sub->id)->get();
            $subCat = array();
            // set parent category title
            $allData[$key]['parent'] = $sub->title;
            foreach ($subCategory as $k=>$subcat) {
                $subCat[$subcat->id] = $subcat->title
            }
            // set child category array
            $allData[$key]['child'] = $subCat;
        }

        if (count($allData) > 0) {
            $response = (new ApiMessageController())->successResponse($allData, "Categories List Found!");
        } else {
            $response = (new ApiMessageController())->failedresponse("No Categories List Found");
        }
    } catch (\Illuminate\Database\QueryException $ex) {
        $response = (new ApiMessageController())->queryexception($ex);
    }
    return $response;
}

Выход:

array(
    0 => array(
        'parent' => 'parent 1',
        'child'  => array(
                        '1' => 'child 1',
                        '2' => 'child 2'
                    )
    ),
    1 => array(
        'parent' => 'parent 2',
        'child'  => array(
                        '1' => 'child 1',
                        '2' => 'child 2'
                    )
    )
)

Может быть, это вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...