2017-12-01 3 views
0

私は自分自身のPHP MVCフレームワークを構築しています。 (https://github.com/carlinoo/Vinum)私はRails Active Recordに似たようなことをどうやってできるのだろうと思っていました。たとえば:PHPモデルビューコントローラ(MVC)アクティブなリコンサイドメソッド

Book.where('reserved = true').limit(10).offset(5) 

これは

SELECT * FROM Book WHERE reserved = true LIMIT 10 OFFSET 5; 

に翻訳したものクラスメソッドがリンクされているので、それはすべてそのSQL文を評価します。私はリンクされたクラスメソッドをPHPでお互いにやりとりする方法を見つけることができません。私は配列のように動作するようにArrayObjectを拡張するこのクラスのFlowingQueryを作成しましたが、クラスを相互にやりとりする方法はまだ分かりません。現時点では、配列内のすべてのオブジェクトを返す「どこで」クラスメソッドがあり、配列内のオブジェクトの数を数える「制限」が返され、そのうちの10個だけが返されます。これは実際にはSQLに変換されません。

アイデアやアドバイスはありますか?

+0

チェックはLaravelの雄弁ORMは、それがPHP https://laravel.com/docs/4.2/eloquent – arieljuod

+1

しないでくださいではActiveRecordパターンを実装します。 [Active Record](https://martinfowler.com/eaaCatalog/activeRecord.html)は、ドメインビジネスロジックとパーシスタンスロジックを同じクラスにマージしてSRPに違反するため、反パターンです。これは、非常にテストしなければならず、パフォーマンス上の問題、DBスキーマが複雑になり複雑さが増します。 [Data Mapper](https://martinfowler.com/eaaCatalog/dataMapper.html)パターンを採用する必要があります。 –

+0

@arieljuodそれは良いリソースでした。 –

答えて

-1

メソッドが同じクラスにある場合、それらを連鎖可能にするには、連鎖可能なメソッドは$ thisを返す必要があります。

public function doSomething() 
{ 
    // Do stuff 

    return $this; 
} 
関連する問題