MVC: лучший способ запроса связанных таблиц - PullRequest
2 голосов
/ 14 июня 2011

Я довольно давно программировал процедурный код, а недавно я изучал MVC. Я попробовал несколько фреймворков и решил, что хочу написать свой собственный с нуля, чтобы изучить его изнутри и снаружи. Пока у меня есть работающий MVC-фреймворк (и он прекрасно работает!), Но я пытаюсь определить лучший способ запроса связанных таблиц.

На данный момент в моей member модели я использую следующее, чтобы получить список членов и их rank_name

SELECT m.*, r.`name` AS rank_name
FROM `{$this->table}` AS m
LEFT JOIN `ranks` AS r
    ON r.`id` = m.`rank_id`

Это прекрасно работает, но не похоже на то, как это должно быть сделано в MVC. После работы с фреймворками, такими как cakephp, я знаю, что member hasOne rank (или это rank hasMany member?)

Единственная альтернатива, о которой я подумал, - это запрос самой таблицы members в модели member, а затем вызов метода в модели rank, чтобы получить имя ранга для каждой строки, например:

// member model
SELECT *
FROM `{this->table}`

while($row = $result->fetch_assoc()) {
    $data []= $row;
    $data['rank_name'] = $this->Rank->get_name($row['rank_id']);
}

Но это не может быть очень эффективным, поскольку для каждого члена нужно запускать отдельный запрос. Единственная другая концепция, о которой я подумал, - использовать функцию MySQL IN(x, y, z) для получения ранговых имен, а затем каким-то образом объединить массивы.

Какова наилучшая практика для этого в MVC?

1 Ответ

1 голос
/ 14 июня 2011

Может быть, ORM (объектно-реляционный картограф) - это то, что вы ищете. ORM помогает вам хранить и извлекать ваши модельные объекты из базы данных.

Для PHP, я думаю, ваш лучший выбор - Doctrine .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...