Craft CMS element-api как получить значения поля категории в записи

Работа с файлом element-api.php из проекта Craft CMS. Имеет множество вспомогательных функций. Я добавил категорию под названием дисциплины. Я пытаюсь выставить значения для каждой записи.

Вот вся вспомогательная функция, над которой я работаю:

    // Get all projects, by date, newest first
    function getAllProjects() {
      $caseStudies = [];
      $query = \craft\elements\Entry::find();
      $query->section('caseStudies');
      $query->orderBy('postDate desc');
      foreach ($query->all() as $page) {
        $isPublic = $page->public;
        $parent = $page->getSection()->handle;
        if ($isPublic) {
          $serviceData = [];
          foreach ($page->modules->all() as $module) {
            switch ($module->type->handle) {
              case 'service':
                $service = $module->service->one();
                if ($service) {
                  $serviceData[] = [
                    'id' => $service->service->one()->id,
                    'title' => $service->service->one()->title,
                  ];
                }
                break;
            }
          }

          $coverColor = [
            'r' => $page->coverColor ? $page->coverColor->r : 0,
            'g' => $page->coverColor ? $page->coverColor->g : 0,
            'b' =>$page->coverColor ? $page->coverColor->b : 0,
          ];

          $caseStudies[] = [
            'id' => $page->id,
            'title' => $page->title,
            'meta' => [
              'navigationColor' => $page->navigationColor->value,
              'title' => $page->metaTitle ? $page->metaTitle : $page->title,
              'description' => $page->metaDescription,
            ],
            'slug' => $page->slug,
            'postDate' => date("d-m-Y",$page->postDate->getTimestamp()),
            'json' => UrlHelper::url("work/{$page->slug}.json"),
            'parent' => $parent,
            'headline' => $page->headline,
            'client' => $parent === 'caseStudies' ? $page->client->one()->title : null,
            'services' => $serviceData,
            'discipline' => array_map(function (CategoryModel $category) {
              return [
                  'id' => $category->id,
                  'title' => $category->title,
              ];
            }, $page->discipline->find()),
            'cover' => handelImages($page->cover->all()),
            'coverColor' => $coverColor,
            'coverVideo' => [
              'source' => $page->coverVideo
            ]
          ];
        }
      }
      return $caseStudies;
    }

Все работает, за исключением того, что в массив caseStudies я добавил эту строку:

    'discipline' => array_map(function (CategoryModel $category) {
          return [
              'id' => $category->id,
              'title' => $category->title,
          ];
        }, $page->discipline->find()),

который возвращает ошибку: аргумент 1, переданный в {closure}(), должен быть экземпляром CategoryModel, экземпляром craft\elements\Category.

сайт находится на Craft 3.3.15. Плагин Element-Api версии 2.6.0


person Bryan Robertson    schedule 30.11.2020    source источник


Ответы (1)