Как получить данные из нескольких таблиц с помощью одного запроса SQL в Ханами? - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть модели Hanami User и UserInfo, которые имеют has_one связь.

Хранилища выглядят следующим образом:

class UserInfoRepository < Hanami::Repository
end

class UserRepository < Hanami::Repository
  associations do
    has_one :user_info
  end
end

Вопрос: к кому я могу присоединиться и загрузить обатаблицы с одним запросом?(Я ищу что-то похожее на Rails 'includes).

До сих пор я пробовал

def users_with_info
  users.join(:user_info)
end

Это объединяет, но не выбирает столбцы из user_infosТаблица.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Я полагаю, что мы столкнулись именно с этой проблемой с моим товарищем по команде в одном из наших проектов в Ханами, и это , как мы ее решили .

Мы в основном обошли репозиторий Hanami, перейдя прямо к основному отношению ROM, используя ROM::Relation#wrap, чтобы объединить нашу User сущность с интересующей сущностью.

Дайте знать, если это помогло вам, или вам нужно больше подробностей. Ура!

0 голосов
/ 25 апреля 2018

Когда вы выбираете данные через репозиторий в Hanami, результирующий набор отображается на сущности.По умолчанию UserRepository сопоставляется с сущностью User.Я предполагаю, что у этой сущности нет атрибутов для столбцов из user_info.

. Вам нужно создать сущность, которая может содержать данные, которые вы хотите извлечь из базы данных, и затем вызвать.as(ThatEntityYouCreated) в наборе результатов.Например,

def users_with_info
  users.join(:user_info).map_to(UserWithInfo)
end

Если вы не хотите создавать сущность и просто хотите получить простой хеш, вы можете сделать это:

users.join(:user_info).map.to_a

Однако я считаю, что этокостыль.Вы не должны возвращать хэши из ваших методов репозитория.

...