6

フレームワークを使用せずに、CRUD (create, retreive, update, delete)操作ごとに共通の関数を作成する簡単な方法はありますか?PHPたとえば、テーブル名とフィールド名をパラメーターとして受け取り、データをに挿入する単一の作成関数が必要mySQL databaseです。もう1つの要件は、関数が結合をサポートできる必要があることです。つまり、必要に応じて複数のテーブルにデータを挿入できる必要があります。

これらのタスクはフレームワークを使用して実行できることは知っていますが、さまざまな理由(ここで説明するには長すぎる)のため、使用できません。

4

8 に答える 8

7

そのような関数を書こうとすると、さらに別のフレームワークを実現したことにすぐに気付くでしょう。

于 2008-09-25T07:49:57.247 に答える
3

もちろんそうではありません。そのため、これらのフレームワークが存在し、クラッド機能を実装しています。最初に、既存のフレームワークを実際に使用するのに必要な人を説得しようとします。次に、上記に失敗した場合は、そのうちの1つまたは2つを調べて、実装のアイデアをコピーします。あなたがhttp://www.phpobjectgenerator.com/を見ることができるすべてに失敗する

于 2008-09-25T06:44:25.877 に答える
2

フレームワークがない場合は、ORMがない場合が含まれますか?それ以外の場合は、 DoctrineまたはPropelを確認することをお勧めします。

于 2008-09-25T06:31:30.883 に答える
2

私はあなたの気持ちを知っています。

Pork.DbObject は、オブジェクトを拡張できる単純なクラスです。機能するには、db 接続クラスが必要です。

チェックアウトしてください: www.schizofreend.nl/pork.dbobject/

(そうそう、yuk @ php オブジェクト ジェネレーター。肥大化警告!すべてのクラスでこれらのカスタム関数を持ちたいと思っているのは誰ですか???)

于 2008-09-25T09:47:10.867 に答える
2

しばらく前にSOでこの質問に出くわしましたが、当時、軽量な方法でこれを行うものは何も見つかりませんでした。

私は最終的に自分で作成することになり、他の人が役立つかもしれない場合に備えて、最近それをオープンソース (MIT ライセンス) にしました。Github にアップされています。お気軽にチェックして、必要に応じて使用してください。

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

うまくいけば、いくつかの使用が見出されます - いくつかの改善/貢献も見たいので、お気軽にプルリクエストを送信してください! :-)

于 2012-11-27T19:57:13.223 に答える
1

私はまさにこれを書きました、それは洗練された足場のようなものです. これは基本的に、使用するテーブル、フィールド名と型を含む配列、およびアクションをコンストラクターが受け取るクラスです。このアクションに基づいて、オブジェクトはそれ自体でメソッドを呼び出します。例えば:

これは私が渡す配列です:

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

次に、コンストラクターを呼び出します。

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

上記の場合、コンストラクターは $table からのデータを表示するフォームを表示する 'edit' メソッドを呼び出しますが、配列に設定したフィールドのみです。使用するレコードは、$_GET メソッドによって決定されます。この例では、'student' フィールドがテキスト ボックスとして表示されます (したがって、'text' タイプ)。「タイトル」は単に使用されるラベルです。「非表示」であるため、ID フィールドは編集用に表示されませんが、プログラムで使用できます。

「編集」の代わりに「削除」を渡した場合、GET 変数からレコードが削除されます。テーブル名のみを渡すと、デフォルトで、編集、削除、および新規のボタンを含むレコードのリストになります。

多くのカスタマイズ機能を備えたすべての CRUD を含む 1 つのクラスにすぎません。必要に応じて、複雑にすることも単純にすることもできます。これをジェネリック クラスにすることで、任意のプロジェクトにドロップして、指示、テーブル情報、および構成情報を渡すことができます。あるテーブルでは、足場を介して新しいレコードが追加されるのを許可したくない場合があります。この場合、パラメーター配列で "newbutton" を false に設定することがあります。

従来の意味でのフレームワークではありません。内部ですべてを処理する単なるスタンドアロン クラスです。これにはいくつかの欠点があります。重要なのは、すべてのテーブルに「id」と呼ばれる主キーが必要であることです。これがなくても問題は解決できますが、問題が複雑になります。もう 1 つは、管理する各テーブルの詳細情報を示す大きな配列を準備する必要があることですが、これを行う必要があるのは 1 回だけです。

このアイデアのチュートリアルについては、こちらを参照してください

于 2008-09-25T13:54:00.603 に答える
1

時間のストレスがない限り、CRUD を実現する独自の関数を作成する必要があると思います。それ自体がフレームワークかもしれませんが、フレームワークを叫ぶ前にフレームワークが何をするかを学ぶ必要があります....フレームワークのバグを簡単に見つけて自分で修正できるので、これらのことを知っておくと便利です.... ....

于 2008-09-25T14:01:52.363 に答える
0

それは可能ですが、私はお勧めしません。

フレームワークを使用する方法がまったくない場合は、他のすべてのモデルオブジェクトが拡張する基本クラスを作成できます。get_class()次に、基本クラスにとに基づいてSQLを生成および実行させることができますget_class_vars()

出来ますか?はい。
私はそれをお勧めしますか?いいえ

于 2008-09-25T07:02:35.770 に答える