Загрузка нескольких строк из модели? (PHP, MySql) - PullRequest
2 голосов
/ 10 апреля 2019

Одна из вещей, которые я не совсем понимаю в модели MVC, - это загрузка нескольких таблиц данных из модели.

Допустим, у нас есть модель с именем user.


public class User{

protected $username; 
protected $email;
protected $id;

public function setUsername($name, $id) { 
$db->set->name($name)
$db->set->id($id)

} 

public function getUsernameById($id) { 
return $db->get->name($id); 

} 

Насколько я понял, модель эквивалентна одной строке в базе данных (называемой пользователем).

Теперь я написал две функции.Первый - для установки имени пользователя, а второй - для получения имени пользователя по идентификатору.

Предположим, вы хотите получить всех пользователей.Скажем, через метод getAllUsers().Этот метод не подходит для Модели, поскольку он не является единственным объектом.

Теперь я понимаю, что, например, вы можете вызвать этот метод (функцию) в самом контроллере.Но где вы можете определить этот метод (функцию)?Поскольку вы не делаете этого на модели.

Мне также нравится слышать это, если я не прав:)

1 Ответ

1 голос
/ 10 апреля 2019

По сути, ваше определение верно:

Объекты модели содержат данные и определяют логику управления этими данными.Например, объект Student в базовом примере приложения является объектом модели.Он содержит данные, описывающие факты об объекте, такие как имя и фамилия учащегося, и имеет методы, которые могут получить доступ и изменить эти данные (получатели и установщики).Объекты модели не отображаются напрямую.Они часто можно использовать повторно, распространять, сохранять и переносить на различные платформы.

(из: http://best -practice-software-engineering.ifs.tuwien.ac.at / templates/mvc.html)

Итак, где разместить функцию getAllUsers(), если вы не просто поместили ее в модель?

Ну, во-первых, когда мы говорим о термине «модель», мы не всегда имеем в виду модель.В MVC модель (M) содержит всю бизнес-логику .Это означает, что он содержит модель домена , которая является моделью, которую вы имеете в виду в этом вопросе.Но он также содержит уровень обслуживания .

Сервисный уровень обычно состоит из различных классов, которые предоставляют такие функциональные возможности, как, например, getAllUsers() или getAllUsersWhichOwnAGreenTruck().

Вот отличная графика, демонстрирующая это:

MVC Layers

(Источник: Шаблоны доменной модели и уровня сервиса в P из EAA )

В современных приложениях, например, созданных с помощью Laravel PHP Framework, выобычно генерируют базу данных, а также модель и отображение / связь базы данных автоматически (Пример Eloquent ORM: https://laravel.com/docs/5.8/eloquent). Но вы начинаете реализовывать сложную логику приложения на уровне сервиса.

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