Я довольно давно программировал процедурный код, а недавно я изучал 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?