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

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

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

#1 User is offline   katoomba 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 17-June 17

Posted 27 January 2018 - 06:22 AM

Есть модели 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.

Есть идеи?
0

#2 User is offline   softark 

  • Keep It Simple
  • Yii
  • Group: Moderators
  • Posts: 3,550
  • Joined: 16-February 11
  • Location:Japan

Posted 27 January 2018 - 07:57 AM

/* Moved from "General Discussions" to "Russian" */

Please use English in the forums except for Russian forum.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users