Создание слоя модели с PDO

В настоящее время я занимаюсь разработкой инфраструктуры приложений MVC, и я пришел за советом относительно того, как мне следует создавать свои модели.

Модель построена так, что каждая модель сопоставляется с таблицей в базе данных для этих приложений, поэтому типичное приложение будет иметь

  • конфигурация
  • темы
  • Форумы

и каждый будет сопоставлен с именем файла PHP, например, app/models/configuration.php

Теперь проблема, которую я имею, заключается в создании родительского класса базы данных, чтобы иметь возможность обрабатывать определенные данные таблицы, например:

class PDOModel
{
    public function __construct()
    {
        $this->__Communicator = Registry::getPDOInstance();
    }

    public function getSingle($id)
    {
         return /*Row*/;
    }

    /*Etc*/
}

А потом что-то вроде этого для модели приложения

class Model_Topic extends PDOModel
{
    protected $__id_column = 'id';
}

и тогда в моем контроллере я могу использовать так:

$Topic = $this->model->topic->get(22);

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

Любая помощь будет высоко оценен.

2 ответа

Решение

Ваш базовый класс модели не должен наследоваться от класса доступа к базе данных. Скорее, он должен использовать класс базы данных (или маппер, который говорит, что это всегда должна быть база данных?), А затем предоставлять методы ORM (get, insert, update и т. Д.).

Как уже писали другие, вы должны использовать одно из множества готовых решений. Что касается поиска облегченного ORM, другие уже спрашивали об этом раньше. Вот ссылка на один из этих вопросов:

https://stackru.com/questions/1995834/looking-a-lightweight-php-orm

Самое близкое, что я видел, - это Zend_Db, который реализует шлюзы Table и Row поверх PDO. Он имеет поддержку для объединения связанных таблиц, а что нет.

Как правило, то, о чем вы просите, не будет таким "легким", это будет своего рода полная ORM. Лично на твоем месте я бы просто пошел с приличным ОРМ. Propel >= 1.5, Доктрина 1.2 или Доктрина2.

Другие вопросы по тегам