ホームページ > バックエンド開発 > PHPチュートリアル > PHP のマイクロアクティブレコードライブラリ (マイクロ PHP 実装の AR ライブラリ)

PHP のマイクロアクティブレコードライブラリ (マイクロ PHP 実装の AR ライブラリ)

WBOY
リリース: 2016-06-23 13:25:33
オリジナル
1001 人が閲覧しました

PHP で実装されたマイクロ AR ライブラリ

サイズが小さく、詳細なコメントが含まれる合計 400 行のみ
チェーン呼び出しをサポート
サポート関係

はじめに

私が初めて ActiveRecord に触れたのは、当時、Yii を学習していたときでした。 ARを使ってみようと思いました データベースの操作がとても便利です。それで、後で他のフレームワークに目を向けたとき、AR なしではデータベースを操作できないと感じました。 ! !特にフレームワークとも言えない簡易的なものを使ってマイクロPHPサイトを書いていたとき、手書きのSQLはあまりにもダサいと感じていました。
その後、私のお気に入りのイディオムなど、いくつかの優れた独立した ORM ライブラリにも出会い、Yii の AR を単独で使用するというアイデアさえ思いつきました。しかし、それはまだ起こりませんでした。 。 。
2013年、仕事で時間がありすぎた時期があったので、ActiveRecordクラスを自分で実装したいと思い、実践し、将来的にも使用する予定でした。

準備

書き始める前に、github と stackoverflow で多くの php AR ライブラリまたは ORM ライブラリを検索しました。

  • https://github.com/j4mie/idiorm

  • https://github.com/vrana/notorm

  • https://github.com/PrimalPHP/Record

  • https: //github.com/spadgos/Record

  • https://github.com/sgoen/php.pdo.orm

  • https://github.com/jaceju/example-my-orm

  • もちろん、その中で最も優れているのは idiorm と notorm で、github 上でそれぞれ 1600 個以上と 600 個以上のスターを獲得しています。
    イディオムを例に挙げると、私はそれが提供するインターフェイスと使用法が個人的に気に入っています。また、ファイルには 2500 行近くありますが、ライブラリ全体は 1 つのファイルにすぎません。しかし、それはすでに小さな図書館です。もちろん、ファイルは少し長く、少し面倒に見えます。
    比較的言えば、notorm はより OO になるように設計されています。ただし、NotORM_Result クラスでは、大量の文字列を SQL に接続する方法がはっきりとわかり、依然として見栄えがよくないと感じられます。

    デザイン

    このように多数の ORM ライブラリを見ていると、SQL を直接接続する方法に非常に嫌気がさしますが、これも避けられない問題であり、最終的には SQL 文字列を常に生成する必要があります。 。
    重要なのは、この接合作業を完了するためのより「エレガントな」方法を見つけることです。

    ある日、結合された SQL を見ていて、SQL の where 以降のクエリ条件が常に 1 つずつ式 (オペランド + 演算子 + オペランド、たとえば : name=') であることに気づきました。 「デモ」および電子メール=「demo@demo.com」)。

    这个表达式的结构看起来和数学里面的(1+1)*(2+2)是那么的相像。
    ログイン後にコピー

    Even と と or は 1 つずつ演算子にすぎません。さらに改良するには、バイナリ式に加えて、単項式 (オペランドが 1 つだけある式、数学の -1 に似た式) もあります。このように、SQLにおけるselect、from、where、delete、updateなどのキーワードは「演算子」とみなすことができます。

    その後、単純な SQL を 1 つずつ式に分解できます:

    select email, password from `user` where email = 'demo@demo.com';
    ログイン後にコピー
  • select email,password

  • from user

  • where email = 'demo@demo.com '

  • email = 'demo@demo.com'

  • 上記の SQL は合計 4 つの式に分割されており、そのうちの where 部分はネストされた式です。

    実装

    Expressions

    そこで、SQL のさまざまな部分を表す Expressions クラスを特別に定義しました。このクラスには、最後に必要なときに SQL を生成する __toString メソッドが 1 つだけあります

    class Expressions extends Base {    public function __toString() {        return $this->source. ' '. $this->operator. ' '. $this->target;    }}
    ログイン後にコピー

    もちろん、より特別な式 "()" もあります。この式は演算子が分離されているため特別です。

    インターフェイス

    式クラスが抽出された後、ActiveRecord を使用してデータベースにクエリを実行するときに、動詞を入力するたびに、適切な場所に式を挿入するだけです。 SQL インジェクションのリスクを防ぐために、セキュリティ上の理由から、各式の __toString メソッドが最後に一度だけ呼び出されます。
    例:

    rrree

    マジック メソッド

    コードの量を減らすために、ここでは __call マジック メソッドを使用して、アクションごとにメソッドを定義するのを避けています。

    Relationship

    SQL の基本操作の実装に加えて、Yii と同様の ActiveRecord メソッドも実装されているため、Relation メソッドは主キーと外部キーの関係を通じて単純にデータをクエリできます。
    「HAS_ONE」、「HAS_MANY」、「BELONGS_TO」の 3 つの関係が定義されています。
    関係を定義した後は、属性にアクセスするだけで関連データを取得できます。

    プロジェクト

    プロジェクトアドレス: https://github.com/lloydzhou/activerecord
    ドキュメントアドレス: https://lloydzhou.github.io/activerecord
    はpackagist.orgに提出されており、composer

    $user->equal('id', 1);只是在where子句里面生成了一个 "id=:ph1"的表达式,同时保存了一个array(':ph1'=>1)的参数而已。同样的还提供了简写的”eq“以及”ne“,”ge“等接口函数。另外还有”select“,”from“,”group“,”order“,”limit“,”top“以及”where“等接口函数。
    ログイン後にコピー
    を通じてインストールできます

    デモ

    このライブラリをテストし、同時に改善するために。そこで、このライブラリを別の Router および MicroTpl と組み合わせて使用​​し、基本的にこれらのライブラリの API をカバーする簡単なブログを作成しました。

    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート