Модель и связь один ко многим

kollega

Новичок
Здравствуйте. Интересует такой вопрос, например, есть две таблицы в базе данных

Таблица news
idtitlecat_id
1Новость 13
2Новость 22
3Новость 31

Таблица categories
idtitle
1Категория 1
2Категория 2
3Категория 3

А также создано две модели для работы со своими таблицами данных (news_model и categories_model).
В итоге получается (в качестве примера приведу вывод последних новостей), что я в контроллере сначала обращаюсь к методу модели news_model, который возвращает массив с последними 10 новостями. После чего В КОНТРОЛЛЕРЕ прохожусь в цикле по полученному массиву и формирую массив из идентификаторов категорий. После чего обращаюсь к методу модели categories_model, который возвращает массив категории по их идентификаторам. После этого в контроллере формирую массив с данными для вывода ($result = [ [news] => [....] , [categories] => [.... ] ]) и отдаю эти данные в вид. В итоге он (вид) возвращает HTML код в контроллер, а тот в свою очередь отображает этот код пользователю.

Так вот. Вопрос в следующем. Как правильно это организовать. Мне кажется, что в контроллере не правильно проходиться в цикле по данным, а как это сделать правильно я не знаю. Прошу помощи у вас)
 

WMix

герр M:)ller
Партнер клуба
у тебя путаница в голове, модель это не таблица в базе, хотя может ее повторять, модель в представлении MVC, это данные (Entity) и код по доставке и изменению этих данных (Service).
в контроллере вылавливаешь переменные запроса пользователя, вызываешь метод модели по доставке данных используя переменные запроса, а результат передаешь на представление.
те в твоем случае "цикл", если ему необходимо быть, должен быть в моделе
 

kollega

Новичок
у тебя путаница в голове, модель это не таблица в базе, хотя может ее повторять, модель в представлении MVC, это данные (Entity) и код по доставке и изменению этих данных (Service).
в контроллере вылавливаешь переменные запроса пользователя, вызываешь метод модели по доставке данных используя переменные запроса, а результат передаешь на представление.
те в твоем случае "цикл", если ему необходимо быть, должен быть в моделе
Тоесть в модели новостей необходимо обращаться к модели категорий?
PHP:
<?php



class news_model {

    public function getLastNews($cnt = 10) {
        $news = $this->_qGetPreviewNews($cnt);
        $cats = array();
       
        foreach ($news as $value) {
            $cats[] = $value['cat_id'];
        }

        $cats = array_unique($cats);
        $catModel = new categories_model();
        $categories = $catModel->getCategoryByIds();
       
        return array( 'news' => $news, 'categories' => $categories);
    }

    private function _qGetPreviewNews($cnt){
        //выполнение запроса к базе данных и возвращение выборки из нее в виде массива
    }
}


class categories_model {

    public function getCategoryByIds($ids){
        $categories = $this->_qGetCategoryByIds();
        $return = array();
       
        foreach ($categories as $value) {
            $return[$value['id']] = $value;
        }
       
        return $return;
    }

    private function _qGetCategoryByIds($cnt){
        //выполнение запроса к базе данных и возвращение выборки из нее в виде массива
    }
}
или же вы имели ввиду объединить две модели в одну?
 

WMix

герр M:)ller
Партнер клуба
я создал бы, если бы делал как ты, минимум 3 класса, один категории, один новости и третий который сложит результаты воедино
 

WMix

герр M:)ller
Партнер клуба
а вообще я посоветовал бы тебе взять любой готовый framework и на нем поучиться писать, ты очень быстро поймешь, на сколько неправильно ты думаешь.
(вероятнее всего твою страничку из 2х контроллеров можно связать на уровне представления)
 
Последнее редактирование:
Сверху