SQL Builder for PHP,支持JOIN?
你们中有谁知道有一个库可以帮助你们构建/操作SQL查询,它支持JOIN 我认为,如果你有一些东西可以返回一个对象,有一些查询集,并且仍然能够对它应用连接、子查询等等,那么它会给你很大的灵活性 我四处搜索,只找到了SQL Builder,它看起来非常基本,不支持连接。这将是一个非常有用的主要功能。也许您可以尝试一种,比如or,它们有一种很好的编程查询语言,它们会返回表示数据库中行的对象数组 例如,对于条令,您可以这样做:SQL Builder for PHP,支持JOIN?,php,sql,join,builder,sqlbuilder,Php,Sql,Join,Builder,Sqlbuilder,你们中有谁知道有一个库可以帮助你们构建/操作SQL查询,它支持JOIN 我认为,如果你有一些东西可以返回一个对象,有一些查询集,并且仍然能够对它应用连接、子查询等等,那么它会给你很大的灵活性 我四处搜索,只找到了SQL Builder,它看起来非常基本,不支持连接。这将是一个非常有用的主要功能。也许您可以尝试一种,比如or,它们有一种很好的编程查询语言,它们会返回表示数据库中行的对象数组 例如,对于条令,您可以这样做: $q = Doctrine_Query::create(); $q->
$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();
和推进:
$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);
您可以在这两方面做更多的工作…我建议您使用PHP框架,比如Symfony,它默认使用Propel,如果您愿意,还可以使用Doctrine
CakePHP也使用ORM,但我不知道是哪一种。我强烈推荐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 } ?>
它有支持MySQL、MSSQL、PostgreSQL、SQLite、Oracle等的适配器。您还可以将Web服务包装为模型,甚至让它在数据库中的数据和远程数据之间进行连接!这是非常聪明的东西
希望这有帮助:)从软件包中可以做以下事情:
// 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框架手册)
如果您不想运行一个完整的ORM包,这可能是一种方法。superfast-SQLObject-based-IteratorQuery from-pastapp
对资源进行迭代
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
);
}
foreach(_from('users u'))
->列(“up.email\u地址作为EmailAddress”,“u.user\u名称作为u.UserName”)
->左('userprofiles-up','u-eq('u.id','u-var('up.id'))
->其中(_和()->add(_eq('u.is_active',1)))
->极限(0,10)
->订单(“用户名”)
->以$user身份执行(“myConnection”){
埃科斯普林特(
“
”,
$user->emailAddress,
$user->UserName
);
}
这似乎是一个具有复杂联接支持的SQL生成器:如果您已经在使用PDO,FluentPDO看起来很不错:我使用phptoolcase库中的查询生成器,它使用PDO连接器,具有联接支持
您可以将它与库中的连接管理器一起使用,以非常快速地设置多个数据库连接。试试magsql,这是一种为PHP编写的性能而设计的SQL生成器,它提供了连接支持和跨平台SQL生成
它目前用于最快的纯PHP orm“maghead”您可以使用lenkorm,它非常简单: 选择('contents)->left('categories.category.id=contents.category\u id)->where('content\u id=1')->result() 或者,您可以使用: 选择('contents)->left('categories->using(categoru_id)->where('content_id=1')->result()
你想要多少功能?SQL的OO抽象?ORM?一个“智能”查询生成器,你可以提供一个字段列表和条件列表,让“神奇地”为你构建查询?好吧。很多人都喜欢它。但使用专有的类似SQL的语言来取代SQL对我来说似乎从来都不合适。@Stann我同意你的看法,consiSQL比其他类似SQL的语言更复杂。你有一个参考链接可以从那里看到这个库吗?
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
);
}