моделирование объектов базы данных в MVC - как их создать? - PullRequest
2 голосов
/ 07 апреля 2010

Я работаю над веб-приложением PHP и пытаюсь использовать модель MVC. У меня есть много вещей, которые существуют как «сущности базы данных» - ряд или набор связанных строк, которые концептуально представляют собой одну «узнаваемую человеком» вещь. Поэтому я часто пытаюсь предоставить интерфейс для этой вещи в модельном классе.

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

Например, мои __construct() методы часто будут иметь аргументы (т.е. $id для WHERE id = $id), чтобы я мог выбирать данные из базы данных и заполнять все свойства объекта из этих данных. Однако, когда я хочу создать новую сущность, значения для этих аргументов еще не существуют!

Как вы все справляетесь с этой ситуацией? Вы

  • попытаться обеспечить функциональность для создания и последующих манипуляций в одном и том же объекте
  • есть другой класс только для генерации сущности
  • избегать __construct и иметь что-то вроде create() для новых сущностей и instantiate() для существующих
  • что-то еще?

1 Ответ

2 голосов
/ 07 апреля 2010

Если вам нужна возможность создавать «новые» объекты, тогда я не думаю, что ваши конструкторы должны загружаться из базы данных по умолчанию.Поскольку PHP не поддерживает перегрузку функций (поэтому вы не можете иметь перегруженные конструкторы), вы можете либо просто удалить код «заполнить из базы данных» из конструктора в функцию для этой цели, либо дать аргумент $id -typeзначение по умолчанию, которое указывает, что свойства не должны заполняться из базы данных:

function __construct($id = 0)
{
    if ($id == 0)
        // create with blank properties
    else
        // load from database
}

Затем, если вы хотите новый объект, вы просто вызываете его без аргументов, и если вы хотите загрузить из базы данных, вы включаете аргумент id.

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