PHP için SQL Builder, destek Katıl?

6 Cevap php

Eğer herhangi destekleri bulunuyor JOIN, SQL sorguları işlemek / oluşturmanıza yardımcı olur bir kütüphane farkında mısınız?

Eğer bazı sorgu kümesi olan bir nesneyi, dönmek, ve hala, sorgular ve böyle Katılın uygulamak mümkün olabilecek bir şey varsa ben düşünürdüm bir esneklik verecek.

Ben çevresinde arama ettik, ve sadece çok temel görünüyor SQL Builder, bulduk ve birleştirmeler desteklemiyor. Gerçekten yararlı kılacak önemli bir özellik olacağını.

6 Cevap

Belki Propel gibi, bir ORM deneyebilir veya Doctrine, onlar güzel bir programatik sorgu dili var ve onlar size satırları temsil eden nesneler diziler iade edin veritabanı ...

Örneğin Doktrini ile yapabileceğiniz bu gibi birleşimler:

$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();

Ve uskur ile:

$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);

ve hem de çok daha fazlasını yapabilirsiniz ...

Zend_Db_Select Zend Framework böyle şeyler yapmak gibi bir Zend_Db paketinden:

// 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 Kılavuzunda {[) 0 (]} 'dan itibaren)

Eğer bir tam şişmiş ORM paketi çalıştırmak için beğenmezseniz, bu gitmek için bir yol olabilir.

Ben çok CakePHP'ye öneririz. Bu yaratan tablolar arasındaki dernekler dayalı, sizin için otomatik olarak katıldı.

Eğer bir blog yazmaya olsaydı ki:

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 } ?>

Yani bir blog yazısı görüntülemek için yazmak zorunda tüm olurdu, veritabanı şema okuma ve önbelleğe alınır. Sürece sözleşmeler ile tutarlı tutmak gibi, sizin masa kurmak nasıl kek şey söylemek zorunda değilsiniz.

posts:
id INT
body TEXT
created DATETIME

comments:
id INT
body TEXT
name VARCHAR
post_id INT

Bu MySQL, MSSQL, PostgreSQL, SQLite, Oracle ve diğerlerini desteklemek için adaptörler vardır. Ayrıca model olarak webservices sarın, ve hatta bunu yapmak için alabileceğiniz veritabanı ve uzak veri veriler arasında katıldı! Bu çok akıllıca bir şey.

Bu yardımcı olur umarım :)

Ben varsayılan olarak Propel kullandığı gibi Symfony'de gibi bir PHP çerçeve kullanarak öneriyoruz ve dilerseniz Doctrine kullanabilirsiniz.

CakePHP de bir ORM kullanır, ama hangisi bilmiyorum.

http://laravel.com/docs/queries: Bu destek katılmak kompleksi ile bir SQL oluşturucu gibi görünüyor

FluentPDO güzel görünüyor zaten PDO kullanarak eğer: http://fluentpdo.com/documentation.html