ActiveRecord по двум таблицам

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
tlcl444w1plvc6c
Сообщения: 7
Зарегистрирован: 2019.12.18, 19:19

ActiveRecord по двум таблицам

Сообщение tlcl444w1plvc6c »

Добрый день.

Имеется следующая структура БД (MYSQL):
Таблица users с полями: id, username, ....
Таблица users_settings с полями: user_id, setting_1, setting_2, ....

Имеется класс :
class User extends ActiveRecord { ... }

Задача: заставить класс User видеть поля user_settings и обращаться к ним как к своим собственным.
Т.е: $user->setting_ 1 = "test"; $user->save();
При чем: если в таблице users_settings нет строки для связи - создавать её.

Вопрос зачем это всё? У меня База общая для нескольких сайтов, и нужно для конкретного сайта доп поля у user'ов.

Как это можно красиво решить средствами Yii?
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: ActiveRecord по двум таблицам

Сообщение Alexum »

Если настроек много и потенциально будет ещё больше - то лучше связать один ко многим (под каждый setting отдельную запись). На github можно примеры посмотреть на тему yii2-settings, н-р: https://github.com/yiier/yii2-user-setting
tlcl444w1plvc6c
Сообщения: 7
Зарегистрирован: 2019.12.18, 19:19

Re: ActiveRecord по двум таблицам

Сообщение tlcl444w1plvc6c »

А если всё таки настроек будет не большое количество, но выносить каждую под отдельную запись не хочется, хочется именно получить связку двух таблиц один к одному. Как реализовать это при помощи ActiveRecord?
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: ActiveRecord по двум таблицам

Сообщение Alexum »

Простого решения, насколько я знаю, для ActiveRecord нет, придётся многое переписывать. Оно вам надо? Если очень хочется иметь плоскую таблицу настроек - работайте с ней через связь один к одному ($user->settings->color). При желании можно добавить на модель User поведение или переопределить её afterSave(), чтобы при вызове $user->save() заодно и сохранялись изменения связанной с ней модели settings (или её создание с default параметрами).
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: ActiveRecord по двум таблицам

Сообщение unknownby »

tlcl444w1plvc6c писал(а): 2020.02.24, 15:10 А если всё таки настроек будет не большое количество, но выносить каждую под отдельную запись не хочется, хочется именно получить связку двух таблиц один к одному. Как реализовать это при помощи ActiveRecord?
Если у тебя статические настройки, тогда в таблице с настройками пользователей у тебя должно быть столько же столбцов, сколько настроек. И связь один к одному работает.
Если у тебя динамические настройки, тогда в таблице с настройками пользователей у тебя будет id, user_id, setting_id. И по связи один ко многим достаешь все настройки, которые есть у конкретного пользователя.
tlcl444w1plvc6c
Сообщения: 7
Зарегистрирован: 2019.12.18, 19:19

Re: ActiveRecord по двум таблицам

Сообщение tlcl444w1plvc6c »

Понял, всем спасибо за помощь!
Ответить