Как сделать жадную загрузку ТОЛЬКО массива идентификаторов из таблицы связки?

Есть модели Job и JobCategory. К одной Job может быть привязано множество JobCategory. Их связь реализуется через таблицу-связку, а метод в классе Job выглядит так:




public function getCategories() {

    return $this->hasMany(JobCategory::className(), ['id' => 'category_id'])

      ->viaTable(JobToCategoryLink::tableName(), ['job_id' => 'id']);

  }



Таким образом я могу делать жадную загрузку всех связанных с Job’ом категорий:




Job::find()

  ->joinWith(['categories'])



Однако, это влечёт расход памяти, потому что для каждого Job создаётся массив JobCategory, каждый элемент JobCategory является уникальным объектом, хотя многие из элементов представляют одну и ту же запись в БД.

Так как записей JobCategory у меня не много, я кеширую их в память в redis, написал репозиторий JobCategoryRepository, который имеет метод fetchAll($idList) и по списку идентификаторов возвращает инстансы JobCategory.

Вопрос: как сделать жадную загрузку ТОЛЬКО МАССИВА ИДЕНТИФИКАТОРОВ КАТЕГОРИЙ, связанных с Job? По-идее я мог бы составить запрос вида:




public function getCategoryIdList() {

    return $this->hasMany(JobToCategoryLink::tableName(), ['job_id' => 'id'])

      ->addSelect(['category_id']);

  }



и загружать его через ->joinWith([‘categoryIdList’]), но в этом случае рилейшен categoryIdList всегда пустой массив. Вернуть просто Query с нужными параметрами запроса я не могу, потому что запросы из рилейшенов выполняются либо через ->one либо ->all в случае если у объекта запроса стоит multiple = true. А мне нужно просто ->column.

Есть идеи?

[color="#006400"]/* Moved from "General Discussions" to "Russian" */[/color]

Please use English in the forums except for Russian forum.