- В бд создается темповая табличка (если вдруг нет какого-то подобия Redis);
- В темповую табличку кладется задача, в которой содержится токен;
- В кроне получаешь список задач из таблицы;
- Выполняешь задачи в CRON скрипте;
- Удаляешь выполненные задачи из таблицы;
Прям важно - такая релаизация будет корректно работать только в один поток =)) Для более сложных вещей нужно будет колдовать с очередями.
В теории можно записать echo в деструктор класса, а в каждом методе менять свойство объекта, мммм... private $last_action например. Использовали объект - уничтожили. Он вам выдаст последнее действие.
Если не удобно постоянно уничтожать объект - можно добавить завершающий метод в цепочку, который будет возвращать последнее совершенное действие.
Макс Васильев, в очень грубом приближении это будет выглядеть так:
1. Все модели нужно научить отдавать свои таблицы и поля;
2. Нужно запилить класс управления зависимостями - он же конструктор запросов. Преобразует определенный тип зависимости в определенный кусок запроса;
3. Когда будут готовы п.1 и п.2 нужно описать зависимости в классе Invoice, которые будут автоматически подтягивать имена полей таблиц и сами таблицы, если нужны;
Логика всего этого дела не тривиальна от слова совсем, и в комментариях на тостере её не описать. И то, это решение позволит локализовать проблему, но не избавиться от неё полностью. Классы, работающие с таблицами нужно будет изменять вместе с изменениями таблиц.
Проблему которую вы описывает с успехом решают Eloquent и Doctrine. Эти инструменты достаточно сложны, чтобы не писать их с нуля ))
По сути единственный способ - это отдельно описать зависимости одних моделей от других. И собирать запросы с учетом этих зависимостей. Но даже если вы это сделаете - это не даст 100% защиты от дурака.
Вообще - менять имена в таблицах, из которых собираются объекты - так себе затея. Вам в любом случае нужно будет переписать код всех классов для этих таблиц.
И да правильная настройка foreign key прям помогает не делать глупости )
Но если таки имена полей таблиц/таблицы переименованы приложение просто сломается.
DevMan,
Во-первых, вы. Мы на брудершафт не пили;
Во-вторых, если массив маленький - выигрыша в скорости не будет;
В-третьих, да, вы прям молодец, решение хорошее, я положил его в свою копилку;
И да, манера вашего общения напоминает мне манеру нашего бывшего сотрудника. Сделать громкое заявление, что все {skip}, а я хороший, но забыв приложить аргументы.
з.ы. Утверждение про манеру относится к нашему бывшему, подчеркиваю, бывшему сотруднику.
hollanditkzn, ну насколько я знаю, в YII2 реализован паттерн MVC. Просто переход на другой фв, реализующий ту-же парадигму не даст значительного профита. Необходимо понимание: "А че вообще происходит-то" )))
Архитектура бд - это отдельная история с другими подходами.
hollanditkzn, найс, на дублирование интерпретатор и жаловался. Вообще не комильфо выносить php функции во вьюхи. К сожалению про работу в YII ничего сказать не могу, сам использую Silex, Laravel и очень иногда Symfony.
hollanditkzn, Проблема может быть в том, что вы подключаете один и тот-же файл несколько раз, что вызывает ошибку Cannot redeclare. Чтобы этого избежать нужно подключать файлы с помощью require_once()
Если конечно так не использовать функцию, то работает все
Такой подход только маскирует проблему, но не решает её.
Исходя из того, что там написано запрос должен выглядеть так:
conn.Execute(sql, new {value1, value2, value3})
Я не силен в .Net, возможно объект создается как-то иначе =)