2008-09-25 5 views
6

모든 프레임 워크를 사용하지 않고 CRUD (create, retreive, update, delete) 작업의 공통 함수를 PHP에 작성하는 간단한 방법이 있습니까? 예를 들어, 테이블 이름과 필드 이름을 매개 변수로 사용하여 데이터를 mySQL database에 삽입하는 단일 작성 함수를 갖고 싶습니다. 또 다른 요구 사항은 함수가 조인을 지원할 수 있어야한다는 것입니다. 필요한 경우 여러 테이블에 데이터를 삽입 할 수 있어야합니다.PHP의 일반적인 CRUD 함수

이러한 작업은 프레임 워크를 사용하여 수행 할 수 있지만 여러 가지 이유로 여기 설명하기에는 너무 길다는 것을 알고 있습니다. 나는 사용할 수 없습니다.

답변

1

을 아주 일종의 연마 된 발판입니다. 이것은 기본적으로 생성자가 사용되는 테이블, 필드 이름과 유형을 포함하는 배열 및 액션을 사용하는 클래스입니다. 이 액션에 따라 객체는 자체적으로 메소드를 호출합니다. 예를 들어 :

이다 배열 I 통과 : 생성자가 양식을 제공한다 '수정'메소드를 호출 위의 경우

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

:

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

가 그럼 난 생성자를 호출 $ 테이블에서 데이터를 표시하지만 필자는 배열에 설정 한 필드 만 표시합니다. 사용하는 레코드는 $ _GET 메서드에 의해 결정됩니다. 이 예제에서 '학생'필드는 텍스트 상자 (따라서 '텍스트'유형)로 표시됩니다. '제목'은 단순히 사용 된 레이블입니다. '숨겨진'ID 필드는 편집을 위해 표시되지 않지만 프로그램에서 사용할 수 있습니다.

'edit'대신 'delete'를 전달하면 GET 변수에서 레코드가 삭제됩니다. 테이블 이름 만 전달하면 edit, delete 및 new 버튼이있는 레코드 목록이 기본값이됩니다.

맞춤 설정 기능이 많은 CRUD가 모두 포함 된 클래스입니다. 원하는대로 복잡하거나 간단하게 만들 수 있습니다. 일반 클래스로 만들면 모든 프로젝트에이 클래스를 드롭하고 지침, 테이블 정보 및 구성 정보 만 전달할 수 있습니다. 하나의 테이블에 대해 새로운 레코드가 비계를 통해 추가되는 것을 허용하고 싶지 않을 수도 있습니다.이 경우에는 "newbutton"을 my parameters 배열에서 false로 설정할 수 있습니다.

기존의 의미에서 프레임 워크가 아닙니다. 모든 것을 내부적으로 처리하는 독립 실행 형 클래스입니다. 이에는 몇 가지 단점이 있습니다. 중요한 것은 모든 테이블에 'id'라는 기본 키가 있어야한다는 것입니다.이 키를 사용하지 않으면 빠져 나갈 수 있지만 문제가 복잡해집니다. 또 하나의 큰 배열은 관리 할 각 테이블에 대한 정보를 자세하게 설명해야하지만 준비는 한 번만하면됩니다. 이 아이디어에 대한 자습서가 here

+0

Firefox가 내 웹 사이트를 좋아하지 않습니다. –

+0

이 웹 사이트는 잠시 중단 된 것 같습니다. 몇 번 시도해 봤는데 ... –

+0

그냥 내 사이트가 아닙니다. – lewis

2

프레임 워크가 없으면 ORM이없는 것입니까? 그렇지 않으면 Doctrine 또는 Propel을 살펴 보시기 바랍니다.

3

물론 그렇다고해서 이러한 프레임 워크가 존재하며 완벽한 기능을 구현하지 못합니다. 먼저 기존 프레임 워크를 실제로 사용하는 사람과 두 번째 사람을 설득하려고합니다. 위의 두 가지 중 하나 또는 두 가지를 살펴보고 구현 아이디어를 복사합니다. 당신이 볼 수있는 모든 것을 실패했습니다 http://www.phpobjectgenerator.com/

0

가능하지만 추천하지 않습니다.

프레임 워크를 전혀 사용할 방법이 없다면 다른 모든 모델 객체가 확장하는 기본 클래스를 만들 수 있습니다. 그런 다음 기본 클래스가 &을 생성하도록 get_class()get_class_vars()을 기반으로 SQL을 실행할 수 있습니다.

가능합니까? 예.
내가 그것을 권하고 싶니? 아니요

7

그런 기능을 작성하려고하면 곧 다른 프레임 워크를 깨달았을 것입니다.

2

나는 당신이 느끼는 방식을 안다.

Pork.DbObject는 개체를 확장 할 수있는 간단한 클래스입니다. db 연결 클래스가 필요합니다.

확인하시기 바랍니다 : 이 www.schizofreend.nl/pork.dbobject/

(. 오, 그래, 수다의 @ PHP는 객체 생성 팽창 경고 모든 클래스 ???에서 이러한 사용자 정의 기능을 가지고 싶어!) 내가 쓴

+0

+1 Pork.DbObject의 깔끔함을 위해! –

1

를 참조하십시오

나는 당신이 시간을 강조하지 않는 CRUD를 달성 자신의 함수를 작성한다고 생각합니다. 그것 자체의 프레임 워크일지도 모르지만 프레임 워크를 비명 지르기 전에 프레임 워크가하는 일을 배우는 것이 필요합니다. 프레임 워크에서 버그를 쉽게 픽업하여 자신을 고칠 수 있기 때문에 이러한 것들을 알기가 쉽습니다. ....

1

나는이 질문에 대해 잠시 뒤늦게 우연히 만났고 그 당시에는 경량의 방식으로이 일을 찾지 못했습니다.

나는 내 자신의 글을 쓰는 것을 끝내었고 다른 사람들이 유용하다고 생각할 때를 대비하여 최근에 그것을 소싱 (MIT 라이센스)하기 위해 열었습니다. Github에 올라 있습니다. 당신의 요구에 맞는다면 그것을 사용해보고 사용하십시오! 너무 너무, 일부 개선/기여를보고 싶어요 풀 요청을 제출하여 주시기 바랍니다 -

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

는 잘하면 몇 가지 사용을 찾을 것입니다! :-)