Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Builder for PHP,支持JOIN?_Php_Sql_Join_Builder_Sqlbuilder - Fatal编程技术网

SQL Builder for PHP,支持JOIN?

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

你们中有谁知道有一个库可以帮助你们构建/操作SQL查询,它支持JOIN

我认为,如果你有一些东西可以返回一个对象,有一些查询集,并且仍然能够对它应用连接、子查询等等,那么它会给你很大的灵活性

我四处搜索,只找到了SQL Builder,它看起来非常基本,不支持连接。这将是一个非常有用的主要功能。

也许您可以尝试一种,比如or,它们有一种很好的编程查询语言,它们会返回表示数据库中行的对象数组

例如,对于条令,您可以这样做:

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