2008-09-25 8 views
6

Есть ли простой способ написать общую функцию для каждой из операций CRUD (create, retreive, update, delete) в PHP БЕЗ использования каких-либо фреймворков. Например, я хочу иметь одну функцию create, которая принимает имена таблиц и имена полей в качестве параметров и вставляет данные в mySQL database. Другое требование состоит в том, что функция должна иметь возможность поддерживать соединения I.e. он должен иметь возможность вставлять данные в несколько таблиц, если это необходимо.Общие функции CRUD в PHP

Я знаю, что эти задачи могут быть выполнены с использованием фреймворка, но по разным причинам - слишком длинным, чтобы объяснить здесь - я не могу их использовать.

ответ

1

я написал это очень, это своего рода полированный эшафот. Это в основном класс, конструктор которого принимает таблицу, которая будет использоваться, массив, содержащий имена и типы полей, и действие. На основе этого действия объект вызывает метод сам по себе. Например:

Это массив я прохожу:

$data = array(array('name' => 'id', 'type' => 'hidden') 
      , array('name' => 'student', 'type' => 'text', 'title' => 'Student')); 

Тогда я называю конструктор:

new MyScaffold($table, 'edit', $data, $_GET['id']); 

В приведенном выше случае конструктор вызывает метод «изменить», который представляет собой форму отображение данных из таблицы $, но только поля, которые я установил в своем массиве. Используемая запись определяется методом $ _GET. В этом примере поле «ученик» представлено как текстовое поле (отсюда и тип «текст»). «Title» - это просто используемый ярлык. Будучи «скрытым», поле ID не отображается для редактирования, но доступно для использования программой.

Если я передал 'delete' вместо 'edit', он удалит запись из переменной GET. Если бы я передал только имя таблицы, то по умолчанию был бы список записей с кнопками для редактирования, удаления и нового.

Это всего лишь один класс, который содержит все CRUD с большой настраиваемостью. Вы можете сделать это сложным или простым, как вы пожелаете. Сделав его универсальным классом, я могу отбросить его в любой проект и просто передать инструкции, информацию о таблице и информацию о конфигурации. Я мог бы за одну таблицу не захотеть, чтобы новые записи могли быть добавлены через эшафот, в этом случае я мог бы установить «newbutton» в false в моем массиве параметров.

Это не каркас в обычном смысле. Просто автономный класс, который обрабатывает все внутренне. Есть некоторые недостатки. Ключевыми должны быть то, что все мои таблицы должны иметь первичный ключ с именем «id», вы можете уйти без этого, но это усложнит ситуацию. Другое существо должно быть подготовлено для большого массива, детализирующего информацию о каждой управляемой таблице, но вам нужно сделать это только один раз.

Для учебника по этой идее см here

+0

Firefox не нравится ваш сайт. – 2009-08-26 17:37:18

2

Без каких-либо структур без ORM? В противном случае я бы предложил посмотреть на Doctrine или Propel.

3

Конечно, нет, поэтому эти рамки существуют и реализуют грубые объекты. Сначала я попытался убедить кого бы то ни было, чтобы фактически использовать существующую инфраструктуру, а во-вторых, не получив вышеуказанного, я бы посмотрел один или два из них и скопировал идеи реализации. В противном случае вы можете взглянуть на http://www.phpobjectgenerator.com/

0

можно, но я бы не рекомендовал его.

Если нет абсолютно никакого способа использовать фреймворк, вы можете создать базовый класс, который расширяют все остальные объекты модели. Затем вы можете заставить базовый класс генерировать & выполнить SQL на основе get_class() и get_class_vars().

Возможно ли это? Да.
Я рекомендую? nope

7

Если вы попытаетесь написать такую ​​функцию, вы скоро обнаружите, что только что поняли еще одну структуру.

2

Я знаю, как вы себя чувствуете.

Pork.DbObject - это простой класс, из которого вы можете расширить свои объекты. Для работы просто нужен класс связи db.

пожалуйста, проверьте: www.schizofreend.nl/pork.dbobject/

(. Ах да, Юк @ PHP объект генератор наворотов оповещения кто хочет иметь такие пользовательские функции в каждом классе ???!)

+0

+1 для аккуратности Pork.DbObject! – 2010-01-17 03:04:42

1

Я думаю, вы должны написать свои собственные функции, которые достигают CRUD, если вы не напряжены время. это может быть каркас на своем собственном, но вам нужно узнать, что делает фреймворк, прежде чем кричать фреймворк ... Также полезно знать эти вещи, потому что вы можете легко нащупать ошибки в структуре и исправить их самостоятельно ... ....

1

Я наткнулся на этот вопрос на SO некоторое время назад, и я не обнаружил в то время ничего, что делало это легким способом.

Я закончил тем, что написал свой собственный, и недавно я нашел его, чтобы открыть его (лицензию MIT), в случае, если другие могут оказаться полезными. Это на Github, не стесняйтесь проверить его и использовать, если он соответствует вашим потребностям!

https://github.com/ArthurD/php-crud-model-class

Надеемся, что она будет найти применение - хотел бы видеть некоторые улучшения/взносы, тоже так не стесняйтесь представить тянуть запросы! :-)