SQL Builder для PHP с поддержкой JOIN?

Кто-нибудь из вас знает о библиотеке, которая помогает вам создавать / обрабатывать SQL-запросы, поддерживающие JOIN?

Это обеспечило бы большую гибкость, я думаю, если у вас есть что-то, где вы могли бы вернуть объект, у которого есть определенный набор запросов, и он все равно сможет применить JOIN к нему, подзапросам и тому подобному.

Я искал и нашел SQL Builder, который кажется очень простым и не поддерживает объединения. Что было бы важной особенностью, которая действительно сделала бы ее полезной.

Возможно, вы можете попробовать ORM , например Propel или Doctrine , у них хороший программный язык запросов, и они возвращают вам массивы объектов, которые представляют строки в вашей базе данных …

Например, с помощью 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); 

и вы можете сделать намного больше с обоими …

Zend_Db_Select из пакета Zend_Db Zend Framework может выполнять следующие действия:

 // 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'); 

(из примера 11.54. Пример метода join () в руководстве Zend Framework)

Если вам не нравится запускать полномасштабный пакет 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 } ?> 

Это все, что вам нужно написать, чтобы просмотреть сообщение в блоге, ваша схема базы данных считывается и кэшируется. Пока вы держите его в соответствии с соглашениями, вам не нужно рассказывать торт о том, как настроена ваша таблица.

 posts: id INT body TEXT created DATETIME comments: id INT body TEXT name VARCHAR post_id INT 

Он имеет адаптеры для поддержки MySQL, MSSQL, PostgreSQL, SQLite, Oracle и других. Вы также можете обернуть веб-сервисы в качестве моделей и даже заставить их делать соединения между данными в вашей базе данных и удаленными данными! Это очень умно.

Надеюсь это поможет 🙂

сверхбыстрый SQLIbject на основе IteratorQuery из pastaPHP
итерации по ресурсам

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

Я бы посоветовал использовать фреймворк PHP, такой как Symfony, который использует Propel по умолчанию и может использовать Doctrine, если хотите.

CakePHP также использует ORM, но я не знаю, какой из них.

Это похоже на SQL-конструктор со сложной поддержкой соединения: http://laravel.com/docs/queries

FluentPDO выглядит неплохо, если вы уже используете PDO: http://fluentpdo.com/documentation.html

Я использую построитель запросов из библиотеки phptoolcase , он использует pdo-коннектор, поддерживает соединение.

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

Вы можете использовать его с диспетчером соединений для библиотеки, чтобы быстро установить соединение с несколькими базами данных.

Вы можете использовать lenkorm, это очень просто:

select ('contents) -> left (' categories ON categories.category.id = contents.category_id) -> где ('content_id = 1') -> result ();

или вы можете использовать как:

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

Загрузить его из github

Попробуйте magsql https://github.com/maghead/magsql , SQL-конструктор, предназначенный для производительности, написанный на PHP, поставляется с поддержкой поддержки и кросс-платформенной генерации SQL.

В настоящее время он используется в самом быстром чистом PHP orm "maghead"