• Как правильно организовать историю денежного оборота?

    @jus0807
    Может я не правильно проблему понял, но разве нельзя просто сделать так:
    Есть таблицы: Пользователи Таблицы Действия Лог
    Таблица Лог: id user_id action_id target_id datetime comment
    action_id связано с таблицей таблицы - в таблицах хранятся названия таблиц, которые логируются, в Действиях - названия действий для этих таблиц типа Оплатил заказ, поднял в топ, сменил логин и тп.
    В итоге чтобы отрисовать 100 записей, достаточно сделать 1 запрос с 3 join или 4 отдельных запроса.
    select * from log l
    join users u on u.id = l.user_id
    join actions a on a.id = l.action_id
    join tables t on t.id = a.table_id

    В коммент можно сохранить текстовое описание действия типа "Вася удалил запись" или же diff в качестве json или какие-то варианты на эту тему.
    Ответ написан
  • Как в ActiveRecord получить соединенную таблицу?

    @jus0807
    Данные из модели user в модели admin вы можете получить или через связь, как вы правильно написали $admin->user->username
    или есть второй вариант, - выбрать данные как массив, но тогда автодополнение в IDE работать не будет.
    Выглядеть это будет примерно так Admin::find()->with('user')->select(['admin.*', 'user.username'])->asArray()->all();
    на выходе вы получите массивы значений всех полей из таблицы админ и связанными с ними значений username. Как-то так.
    Ответ написан
    Комментировать