2011-12-13 3 views
1

私はplain mysqlとmysqliから分岐し、DAOレイヤではないデータベースアクセスに対して何か良い方法を使用しようとしています(ここではあまりにも複雑です)。DrupalのデータベースAPIのようなクエリビルダー?

私がDrupal開発をしたとき、私はそのデータベースAPIを使用しなければなりませんでした。ほとんどの場合、クエリを作成してすべてのものをエスケープできるようになりました。 PDOとmysqliの準備文は、Drupal Database APIの洗練さと清潔さには近づきません。そして、私はまだ、例えばmysqliで準備された文を使って、未知のサイズの行を挿入することなく、準備された文の目的を破って、自分でクエリを構築する方法を考え出すことができません。そのだけでDrupalのAPI

$query = db_select('tcsync_queue', 'q') 
    ->condition('q.id', $post["tcsync_lastrecord"], '>') 
    ->fields('q', array('id', 'uid', 'type', 'name', 'data')) 
    ->execute(); 

foreach ($query as $item) { 
    $updateitem = array(
     "id" => $item->id, 
     "uid" => $item->uid, 
     "type" => $item->type, 
     "name" => strtoupper($item->name), 
     "data" => $item->data); 
    .... 
} 

の実際のコードから、私の方法で

例を得るのDrupalのクエリビルダにはいくつかの近くに実現クエリビルダはありますか?

+0

あなたはスタンドアロンのデータベースフレームワークを探していますか、あるいはDrupalの代替案を探していますか? – Stian

+0

Drupalのデータベースクラスをシステムから抽出してスタンドアロンで使用しようとしましたか?私はそれがDrupal 7のバージョンで行うのはかなり簡単だろうと思います。 – ceejayoz

+0

@Stian私は自分の非drupalプロジェクトで使用するスタンドアロンフレームワークを探しています – TheLQ

答えて

1

NotORM­Homepage PHPライブラリを探している可能性があります。かなり軽量(あなたが求めているものだと思います)とスタンドアロンのコンポーネントなので、統合の負担はそれほどありません。

これは、接続オブジェクトとしてPDOで動作します:

include "NotORM.php"; 
$pdo = new PDO("mysql:dbname=software"); 
$db = new NotORM($pdo); 

ので、それはPDOで利用可能な任意のデータベースをサポートしています。

あなたはその後、ちょうど、簡単な方法でクエリを実行することができ、これはアプリケーションのテーブルを持つデータベースの例です:

foreach ($db->application() as $application) { // get all applications 
    echo "$application[title]\n"; // print application title 
} 

それがどこで、限界に来るとき、それは次のように動作します。

$applications = $db->application() 
    ->select("id, title") 
    ->where("web LIKE ?", "http://%") 
    ->order("title") 
    ->limit(10) 
; 
foreach ($applications as $id => $application) { 
    echo "$application[title]\n"; 
} 

これはよく似ています。たとえば、codeigniterのsqlコードのように、同じように見えるコードではそうではありません。

+0

うわー、それはほぼ私が探しているものです。これを指摘してくれてありがとう、私はこれとCIの間で選択する必要があります – TheLQ

+0

私はCIをこれに代わるものとは考えません。次に、CIを何かに使うことは考えていませんが、常にCIよりはるかに良い解決策があります。 – hakre

+0

私は、自分のサイト(MVC?)に構造を与えるために、手書きのコードがたくさんあるので、何らかのフレームワークを見つけようとしています。しかし別の質問があります – TheLQ

1

Doctrine 2のDBALが好きだと思います。 私はあなたのためにいくつかのsapleコードスローされます:

$locationIds = array(1,2,3,4,5,6,7); 

    $locationTreeDepthQb = $conn->createQueryBuilder(); 
    $locationTreeDepthQb->select("COUNT(*) as count") 
     ->from('location_tree_data', 'd') 
     ->where("d.tree_depth >= 2") 
     ->andWhere("d.tree_id IN (?)"); 
    $stmt = $conn->executeQuery($locationTreeDepthQb->getSQL(), array($locationIds), array(Connection::PARAM_INT_ARRAY)); 
    $res = $stmt->fetch(); 

をこのクエリビルダで「IN」SQL文の配列を渡すことがいかに簡単であるかに注意してください。

マニュアルは、ここで見つけることができます:

例えば: http://www.doctrine-project.org/docs/dbal/2.2/en/

+0

これは本当に大まかに見えますが、実行可能なようです。私はそれを見てみる – TheLQ

+0

Doctrine2は非常に良いです、彼らは最近、外部のセキュリティ監査を通過しました。 – MrGlass

1

CodeIgniterのは本当によくこれを行います

選択:

$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20); 
$query = $this->db->get(); 

インサート:

$this->db->set('title',$title)->insert('mytable'); 

更新:

$this->db->where('id', $id)->set('title',$title)->update('mytable'); 

を参照してください:http://codeigniter.com/user_guide/database/active_record.html

+0

うわー、それは私が後にしているものに本当に近いです。 IIRCしかし、それはあなたが大規模なMVCフレームワークのような、あなたの全体のウェブサイトを構築しなければならなかった何かでした。アプリケーション全体をコードイグナイタに移動することなく、DB APIを使用できますか? – TheLQ

関連する問題