Как правильно оформить запрос к базе данных?

Прошу совета как правильно обратиться к базе в чем суть. Разрабатываю расширение вот собственно. Меню хранится в json формате вот сама строка json

{
    "menus": {
        "menu0": {
            "title": "Распродажа",
            "model": "\\common\\models\\Category",
            "alias": "Rasprodazha",
            "depth": 0,
            "path": "/gods/gods/category",
            "classItem": false,
            "idInput": false
        },
        "menu1": {
            "menuItem": 215,
            "depth": 0,
            "item": "1",
            "text": "Для нее",
            "classItem": false,
            "idInput": false,
            "aliasInput": false
        },
        "menu2": {
            "menuItem": 217,
            "depth": 0,
            "item": "2",
            "text": "Для дома",
            "classItem": false,
            "idInput": false,
            "aliasInput": false
        }
    }
}


Собственно в чем вопрос вот здесь в моделе Menu в методе renderMenu пытаюсь сформировать меню исходя из выше приведенного кода вот эта строка "menuItem": 217, означает вывести меню с id - 217 . к примеру вот такое
{
    "menus": {
        "menu0": {
            "title": "Бижутерия",
            "model": "\\common\\models\\Category",
            "alias": "Bizuteria",
            "depth": 0,
            "path": "/gods/gods/category",
            "classItem": false,
            "idInput": false
        },
    "extra-2": {
        "munu0": {
            "title": "Акция блузы по - 20%",
            "model": "\\common\\models\\Category",
            "alias": "Akciyabluzypo-20%",
            "depth": 0,
            "path": "/gods/gods/category",
            "classItem": false,
            "idInput": false,
            "imgPath": "http://magaz.lc/frontend/web/image/menu/2017/06",
            "imgName": "logo.png"
        }
    }
}

Что мне не нравится в строке 61 класса (модели) Menu в методе renderMenu я запускаю цикл foreache потом обращаюсь к методу Menu где запрашиваю информацию из базы данных о прикрепленном меню. Хотя я понимаю что таких запросов будет не много но все же для особо нежных натур, да и вообще что бы избежать любое пованивание кода хотелось бы это исправить и заменить на запрос к базе вне цикла. Может есть советы как это можно реализовать?
  • Вопрос задан
  • 197 просмотров
Пригласить эксперта
Ответы на вопрос 2
@melnikov_m
Такие редкоизменяемые данные хорошо бы хранить в кеше. Redis или memcached - ставите зависимость, например, количество элементов и норм...
Ответ написан
Maronus
@Maronus
Если записей в таблице не много - в методе Menu загрузите сразу все, сохраните в переменной уровня класса и ищите уже в ней.

Если много - в методе renderMenu вытащите все находящиеся в $contents->menus IDшники, загрузите все записи по этим IDшникам, так же сохраните в переменную и берите данные из нее.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы