4

JOIN をサポートする SQL クエリの作成/操作に役立つライブラリを知っている人はいますか?

オブジェクトを返すことができ、クエリが設定されていて、JOIN、サブクエリなどを適用できるものがあれば、多くの柔軟性が得られると思います。

私は周りを検索しましたが、SQL Builder しか見つかりませんでした。これは非常に基本的なようで、結合をサポートしていません。これは、本当に便利になる主要な機能です。

4

10 に答える 10

7

PropelDoctrineのようなORMを試すことができるかもしれません。それらは優れたプログラムクエリ言語を備えており、データベース内の行を表すオブジェクトの配列を返します...

たとえば、Doctrine を使用すると、次のように結合できます。

$q = Doctrine_Query::create();
$q->from('User u')
->leftJoin('u.Group g')
->innerJoin('u.Phonenumber p WITH u.id > 3')
->leftJoin('u.Email e');

$users = $q->execute();

そしてPropelで:

$c = new Criteria(AuthorPeer::DATABASE_NAME);

$c->addJoin(AuthorPeer::ID, BookPeer::AUTHOR_ID, Criteria::INNER_JOIN);
$c->addJoin(BookPeer::PUBLISHER_ID, PublisherPeer::ID, Criteria::INNER_JOIN);
$c->add(PublisherPeer::NAME, 'Some Name');

$authors = AuthorPeer::doSelect($c);

両方を使用すると、さらに多くのことができます...

于 2008-10-19T07:46:16.960 に答える
4

Zend FrameworkのZend_DbパッケージのZend_Db_Selectは、次のようなことを行うことができます。

// Build this query:
//   SELECT p."product_id", p."product_name", l.*
//   FROM "products" AS p JOIN "line_items" AS l
//     ON p.product_id = l.product_id
$select = $db->select()
    ->from(array('p' => 'products'), array('product_id', 'product_name'))
    ->join(array('l' => 'line_items'), 'p.product_id = l.product_id');

( Zend Framework マニュアルのExample 11.54. Join() メソッドの例より)

本格的な ORM パッケージを実行したくない場合は、これが適している可能性があります。

于 2008-10-20T16:12:04.397 に答える
1

パスタPHPの超高速SQLObjectベースのIteratorQueryは、
リソースを反復します

 foreach(_from('users u')
   ->columns("up.email_address AS EmailAddress", "u.user_name AS u.UserName")
   ->left('userprofiles up', _eq('u.id', _var('up.id')))
   ->where(_and()->add(_eq('u.is_active',1)))
   ->limit(0,10)
   ->order("UserName")
   ->execute("myConnection") as $user){

   echo sprintf(
          '<a href="mailto:%s">%s</a><br/>', 
          $user->EmailAdress, 
          $user->UserName
   );
 }
于 2011-11-10T14:12:22.150 に答える
1

CakePHP を強くお勧めします。テーブル間の関連付けに基づいて、自動的に結合を作成します。

ブログを書いている場合は、次のように言います。

app/model/post.php:

class Post extends AppModel {
  var $hasMany = array('Comment');
}

app/controller/posts_controller.php:

function view($id) {
  $this->set('post', $this->Post->read(null, $id));
}

app/views/posts/view.ctp:

<h2><?php echo $post['Post']['title']?></h2>
<p><?php echo $post['Post']['body']; /* Might want Textile/Markdown here */ ?></p>
<h3>Comments</h3>
<?php foreach($post['Comment'] as $comment) { ?>
  <p><?php echo $comment['body']?></p>
  <p class="poster"><?php echo $comment['name']?></p>
<?php } ?>

ブログ投稿を表示するために書く必要があるのはそれだけです。データベース スキーマが読み取られ、キャッシュされます。規則に従っている限り、テーブルの設定方法についてケーキに何も伝える必要はありません。

posts:
id INT
body TEXT
created DATETIME

comments:
id INT
body TEXT
name VARCHAR
post_id INT

MySQL、MSSQL、PostgreSQL、SQLite、Oracle などをサポートするアダプターがあります。また、Web サービスをモデルとしてラップし、データベース内のデータとリモート データを結合することもできます。とても賢い内容です。

お役に立てれば :)

于 2008-10-19T12:51:26.327 に答える
0

magsqlを試すhttps://github.com/maghead/magsqlは、PHP で記述されたパフォーマンス用に設計された SQL ビルダーであり、結合のサポートとクロスプラットフォームの SQL 生成が付属しています。

現在、最速の純粋な PHP orm「maghead」で使用されています。

于 2015-04-16T02:35:33.367 に答える
0

これは、複雑な結合をサポートする SQL ビルダーのようです: http://laravel.com/docs/queries

于 2013-10-25T17:59:15.607 に答える
0

phptoolcase ライブラリのクエリ ビルダーを使用します。これは pdo コネクタを使用し、結合をサポートしています。

http://phptoolcase.com/guides/ptc-qb-guide.html

ライブラリの接続マネージャーと一緒に使用して、複数のデータベース接続を非常に迅速にセットアップできます。

于 2014-11-08T16:32:18.080 に答える
0

デフォルトで Propel を使用し、必要に応じて Doctrine を使用できる Symfony などの PHP フレームワークを使用することをお勧めします。

CakePHP も ORM を使用していますが、どの ORM かはわかりません。

于 2008-10-19T11:41:09.170 に答える
-1

非常に簡単な lenkorm を使用できます。

select('contents)->left('categories ON Categories.category.id = contents.category_id)->where('content_id = 1')->result();

または次のように使用できます。

select('contents)->left('categories->using(categoru_id)->where('content_id = 1')->result();

githubからダウンロード

于 2015-04-28T22:29:19.953 に答える