Страница 1 из 1

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

Добавлено: 2020.02.19, 13:12
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?

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

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

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

Добавлено: 2020.02.24, 15:10
tlcl444w1plvc6c
А если всё таки настроек будет не большое количество, но выносить каждую под отдельную запись не хочется, хочется именно получить связку двух таблиц один к одному. Как реализовать это при помощи ActiveRecord?

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

Добавлено: 2020.02.25, 09:54
Alexum
Простого решения, насколько я знаю, для ActiveRecord нет, придётся многое переписывать. Оно вам надо? Если очень хочется иметь плоскую таблицу настроек - работайте с ней через связь один к одному ($user->settings->color). При желании можно добавить на модель User поведение или переопределить её afterSave(), чтобы при вызове $user->save() заодно и сохранялись изменения связанной с ней модели settings (или её создание с default параметрами).

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

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

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

Добавлено: 2020.02.25, 18:00
tlcl444w1plvc6c
Понял, всем спасибо за помощь!