Я пытался найти пример класса сущности, чтобы убедиться, что я должен в него вставить. Может ли кто-нибудь привести пример того, как будет выглядеть такой класс?
Должен ли этот объект содержать только данные, как я мог бы просто использовать объект StdClass?
Или он должен содержать мои CRUD-методы тоже? (Создать, прочитать, обновить, удалить)
Будет ли хорошим подходом создать экземпляр моего класса сущностей для каждой строки в моей базе данных или модели, или я должен использовать один класс сущностей и сохранить все разные строки в свойстве массива класса сущностей?
В моем последнем проекте я отделился сущность а также картопостроитель (Действия CRUD), так это выглядит так:
сущность
Class PostEntity
{
public $title;
public $text;
}
картопостроитель
Class PostMapper
{
public function load($id)
{
// load one record from Database where id = $id
}
public function save()
{
// insert new record or edit in Database
}
public function delete()
{
// delete from Database
}
}
Использование — 1 сущность
$postMapper = new PostMapper();
$post = $postMapper->load(1); // load from Database where post_id = 1
$post->title = "New title"; // set new post title
$postMapper->save($post); // edit post in Database
Использование — несколько объектов
$postMapper = new PostMapper();
$posts = $postMapper->loadAllFromCategory(2); // load from Database where cateogory_id = 1
foreach ($posts as $post) {
echo "<h3>" . $post->title . "</h3>";
}
Итак, в моем примере сущность это «глупый» набор переменных (столбцы из таблицы базы данных) и сеттеры / получатели (необязательно), в то время как картопостроитель сделать всю работу с базой данных (CRUD). Если я хочу изменить маппер, чтобы получить результаты из внешнего XML, я просто создаю PostMapperXml класс для загрузки данных из XML.
Как заметил комментатор, использование MVC-фреймворка было бы лучшим способом облегчить задачу. Или список объявлений с использованием Doctrine2 — ORM (он сопоставляет классы PHP с таблицами базы данных и выполняет все запросы за вас).
Но чтобы ответить на ваш вопрос:
Это должен быть отдельный класс для каждой сущности (таблицы). Должен контиан список объявлений Методы CRUD, но могут содержать другие методы, связанные с данными (сущность «Article» может содержать метод getBodyLinks (), который будет анализировать тело и возвращать все URL-адреса.
Каждая сущность … ну, одна сущность. Если вы по какой-то причине не хотите, чтобы множество экземпляров объектов плавало вокруг, вы должны двигаться на более низком уровне, чем объект.
Пример Symfony2 + Doctrine2:
https://github.com/stfalcon/BlogBundle/blob/master/Entity/Post.php
(это просто случайное репо, которое я нашел на github)