Общие функции CRUD в PHP - PullRequest
       11

Общие функции CRUD в PHP

6 голосов
/ 25 сентября 2008

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

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

Ответы [ 8 ]

7 голосов
/ 25 сентября 2008

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

3 голосов
/ 25 сентября 2008

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

2 голосов
/ 25 сентября 2008

Я знаю, что ты чувствуешь.

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

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

(о да, генератор объектов yuk @ php. раздутый сигнал! кто хочет иметь эти пользовательские функции в каждом классе ???)

2 голосов
/ 25 сентября 2008

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

1 голос
/ 27 ноября 2012

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

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

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

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

1 голос
/ 25 сентября 2008

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

1 голос
/ 25 сентября 2008

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

Это массив, который я передаю:

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

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

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

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

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

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

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

Об этой идее см. здесь

0 голосов
/ 25 сентября 2008

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

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

Возможно ли это? Да.
Я бы порекомендовал это? Нету

...