Добрый день.
Имеется следующая структура БД (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?
ActiveRecord по двум таблицам
-
- Сообщения: 7
- Зарегистрирован: 2019.12.18, 19:19
Re: ActiveRecord по двум таблицам
Если настроек много и потенциально будет ещё больше - то лучше связать один ко многим (под каждый setting отдельную запись). На github можно примеры посмотреть на тему yii2-settings, н-р: https://github.com/yiier/yii2-user-setting
-
- Сообщения: 7
- Зарегистрирован: 2019.12.18, 19:19
Re: ActiveRecord по двум таблицам
А если всё таки настроек будет не большое количество, но выносить каждую под отдельную запись не хочется, хочется именно получить связку двух таблиц один к одному. Как реализовать это при помощи ActiveRecord?
Re: ActiveRecord по двум таблицам
Простого решения, насколько я знаю, для ActiveRecord нет, придётся многое переписывать. Оно вам надо? Если очень хочется иметь плоскую таблицу настроек - работайте с ней через связь один к одному ($user->settings->color). При желании можно добавить на модель User поведение или переопределить её afterSave(), чтобы при вызове $user->save() заодно и сохранялись изменения связанной с ней модели settings (или её создание с default параметрами).
Re: ActiveRecord по двум таблицам
Если у тебя статические настройки, тогда в таблице с настройками пользователей у тебя должно быть столько же столбцов, сколько настроек. И связь один к одному работает.tlcl444w1plvc6c писал(а): ↑2020.02.24, 15:10 А если всё таки настроек будет не большое количество, но выносить каждую под отдельную запись не хочется, хочется именно получить связку двух таблиц один к одному. Как реализовать это при помощи ActiveRecord?
Если у тебя динамические настройки, тогда в таблице с настройками пользователей у тебя будет id, user_id, setting_id. И по связи один ко многим достаешь все настройки, которые есть у конкретного пользователя.
-
- Сообщения: 7
- Зарегистрирован: 2019.12.18, 19:19
Re: ActiveRecord по двум таблицам
Понял, всем спасибо за помощь!