Концептуальная дилемма MVC и Mysql - Хотите получить данные mysql из ПРОСМОТРА для получения списка элементов, который возвращается из КОНТРОЛЛЕРА - PullRequest
0 голосов
/ 20 марта 2011

Это может быть объяснено исчерпанием, но я новичок в программировании MVC, и хотя я немного разбираюсь в этом, я действительно борюсь с концепцией.Я работаю в php / codeigniter в системе, которая позволяет пользователю публиковать записи, а другие пользователи могут голосовать за них.Я сохранил записи в таблице MySQL записи и голоса в другой таблице голоса .

Поле, связывающее их вместе, будет записи->id и голосов-> entryId .

Итак, в моем контроллере у меня есть функция, которая вызывает модель и получает последние записи:

$data['recentEntries'] = $this->Entries->getRecentEntries($id);

где $ id - это номер идентификатора записи пользователя, которую вы хотите получить.

Я хочу, чтобы я мог отображать каждую запись вместе с соответствующими голосами для каждогозапись, и, как правило, без MVC, я бы просто нашел все записи для пользователя, затем в цикле foreach нашел бы и отобразил все голоса для каждого конкретного entryId .

Однако с MVCзаписи загружаются в переменную $ data ['latestEntries'], и я бы не стал использовать цикл foreach для запроса mysql в view .

Я скучаю по критической концепции MySQL или MVC здесь, которая должна позаботиться об этом довольнопросто, поэтому любое направление или направление будет невероятно оценено.

Заранее большое спасибо.

- Обновление -

Итак, я обновил контроллер so:

$data['recentEntries'] = $this->Entries->getRecentEntries($id);

$data['votes'] = array();

foreach ($data['recentEntries'] as $entry) {
    array_push($data['votes'], $this->Votes->getVotes($entry->id));
}

Так что $ data ['voice'] теперь содержит голоса за все записи для конкретного пользователя. Правильный ли это способ? Если это так, то один раз в цикле представления view, как мне найти и отобразить соответствующие значения из этих $ data ['voice'] array?

Просмотр:

if (count($recentEntries)>0) {
    foreach ($recentEntries as $row)
    {
        echo $row->content;
    }
}

1 Ответ

1 голос
/ 20 марта 2011

Вы, вероятно, будете поддерживать его как карту, а не как простой массив, чтобы поддерживать связь между записью и ее голосами.И, да, я думаю, что лучше всего заполнить всю модель в контроллере, а не запрашивать БД из представления.

foreach ($data['recentEntries'] as $entry) {
     $data['votes'][$entry->id] = $this->Votes->getVotes($entry->id);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...