Здравствуйте. Мне надо получать данные из 2-х таблиц - users и users_info. Читал, что в модели (user получается) надо создать геттер вроде getUsersinfo где надо прописать что-то вроде return static::findOne(['user_id'=>$id]);
Вопрос: почему нельзя работать с 2 мя моделями в котроллере и чем отличается установка связей hasOne и приведенный выше метод. И что правильнее использовать?
чем отличается установка связей hasOne и приведенный выше метод
Работа в запросе со связями создаст сложный запрос, который получит за раз данные из нескольких таблиц.
FindOne тоже создаст запрос, тоже получит данные, но из одной конкретной таблицы. В этом случае у Вас получится два запроса, один к users, а второй к users_info.
Сделайте двумя разными способами запросы к базе и посмотрите в debug панели, что будет происходить.
Объяснил как мог)))
Дмитрий, то есть все 3 способа имеют право на существование. Но не будет ли "работа с 2 моделями в контроллере" нарушать принцип (точнее, смысл) MVC архитектуры? Для наглядности я распишу что имел ввиду:
Таблица Users:
user_id
Прочие поля
Таблица Users_info:
info_id
user_id (к какому пользователю принадлежит)
Прочие поля
А в контроллере получать user_id, а затем из 2 модели users_info выдергивать нужную запись. Мне кажется всё-таки правильнее переместить всю эту логику в модели.
(точнее, я где-то об этом читал)
А обязательно должна связь существовать на уровне MySQL? То есть индексы, внешние ключи и все дела. Я сейчас попробовал просто код этот и вроде всё работает. (я в связях БД не очень)
66demon666, индексы, внешние ключи не обязательны. Вы связываете по суррогатному ключу, например user_id.
Индексы нужны для связи по внешним ключам и для поиска.