2012-01-21 5 views
1

私は、コンストラクタで少数の行(またはただ1つ)を選択してから、それらを扱うことができるような "モデル"を開発しています例えばそのオブジェクトは、10の限界と著者として「admin」を持っているすべての記事を選択すると、次のようになります。データベースの行を選択し、それらをオブジェクトとして扱います

$posts = new Post(array(
    'where' => array('author' => 'admin'), 
    'limit' => array(0 => 10), 
    # optional: 'order' => array($by => 'desc/asc') 
)); 

# get a field 
$id = $posts->row[0]['id']; 

# editing fields 
$posts->row[1]['body'] = 'new body'; 
$posts->row[2]['body'] = 'new body for post # 3'; 
$posts->update(); 

# delete all the selected posts 
$posts->delete(); 

... et cetera. 

しかし、私は本当にそれを、それは記事を選択する方法が好きではありません。それはあまりにも整形式であり、配列に配列がたくさんあるように思えます。 私は「1つのオブジェクトが1つの行である」と考えましたが、これは10の異なるクエリを実行するために10個の投稿が必要になります。それは効率的ではありません。

質問#1 私にインスピレーションを与える可能性のある類似のパターンまたは同様のスクリプトはありますか?私は、データベースの行がPHPオブジェクト(このコンセプトに沿ってくるすべての賛否論者)として見えると思う最初の人ですか?

質問#2 複数の行を選択する別の方法がありますか?開発者にセレクタとしてテーブルのプライマリキー(投稿IDなど)のみを指定させるソリューションですか? (< =これは解決策ではないと私は思う)。

答えて

2

ほとんどのORM(オブジェクト・リレーショナル・マッパー)は、あなたの質問に対する回答を1つまたは別の方法で返します。

私はDoctrineとで考えてみることをお勧めします。また、MicrosoftのLINQ for .NETなど、他の言語でも見ていただければ幸いです。

私自身、最近、Solid OxygenというPHP用のORMを公開しました。必要に応じて、ドキュメントを見てください。私がしたことは、あなたが開発しようとしているものに非常に近いと信じています。

1

はい、これまでに考えている人もいます。データベースのエントリをオブジェクトとして扱うPHPフレームワークがたくさんあります。 Code IgniterCakePHPまたはSymfonyをご覧ください。これは個人的な意見ですが、コードイグナイタのソースコードは理解しやすく、オブジェクト全体のレイヤーを実装するための優れた基盤を提供できると思います。 )

関連する問題